Skip to main content

Calcolo generale

L'obiettivo di questa documentazione è descrivere il funzionamento del modulo di calcolo delle fibre logiche, analizzando le interazioni tra le varie parti del codice e fornendo una panoramica sui processi coinvolti.

L'implementazione prevede l'uso di diversi servizi e classi di supporto per gestire il calcolo delle fibre secondarie, con particolare attenzione ai controlli preliminari e alla creazione delle nuove fibre.

Inizializzazione del Servizio

All'avvio dell'applicazione, il metodo init() viene invocato automaticamente grazie all'annotazione @PostConstruct. Questo metodo:

  • Registra il servizio ServiceFibersLogical nel gwRegistry.

  • Recupera l'indirizzo IP del server locale.

  • Resetta eventuali calcoli delle fibre logiche rimasti in sospeso.

@PostConstruct
public void init() {
    gwRegistry.registerService("ServiceFibersLogical", this);
    // Reset dei calcoli delle fibre logiche in sospeso
    String serverIp = getServerIpAddress(null);
    daoProjects.resetFibersLogicalCalc(serverIp);
}

Gestione dello Stato di Calcolo

Per assicurarsi che il calcolo delle fibre logiche sia coerente con lo stato attuale del progetto, vengono fornite alcune utility:

  • resetProjectCalcStatus(Long drawing): Resetta lo stato del calcolo delle fibre logiche per un progetto specifico.

  • getServerIpAddress(Long drawing): Recupera l'indirizzo IP del server locale e gestisce eventuali errori di rete loggandoli.

Processo di Calcolo

Il metodo principale che avvia il calcolo delle fibre logiche è fixFibersLogicalOfAProject(CalcFibersLogicalConfig calcFibersLogicalConfig), il quale esegue le seguenti operazioni:

  1. Registra l'inizio del calcolo nei log.

  2. Esegue la fase preliminare (doPreCalcPhase).

  3. Se il calcolo non proviene da un'importazione NT2Star:

    • Genera le nuove fibre secondarie.

    • Associa le fibre ai cavi logici.

    • Esegue calcoli addizionali e bonifiche.

    • Controlla la presenza di errori.

    • Se il calcolo è valido, avvia l'associazione automatica delle giunzioni.

    • Registra la fine del calcolo nei log.

public void fixFibersLogicalOfAProject(CalcFibersLogicalConfig calcFibersLogicalConfig) throws Exception {
    CalcLoggingUtils.logStartOfCalc(calcFibersLogicalConfig);
    doPreCalcPhase(calcFibersLogicalConfig);

    if (calcFibersLogicalConfig.isNT2Star() == null || !calcFibersLogicalConfig.isNT2Star()) {
        CalcFibLogicalSupport calcFibLogicalSupport = generateNewSecondaryFibers(calcFibersLogicalConfig);
        calcFibLogicalSupport = serviceRCablesFibers.associatesRCablesFibersToFibersLogicalByDrawing(calcFibersLogicalConfig, calcFibLogicalSupport);

        doAdditionalCalcs(calcFibLogicalSupport);
        doPreJunctionsReclamations(calcFibLogicalSupport);

        if (!reportManager.checkIfCalcGotErrors(calcFibersLogicalConfig.getDrawing()) || serviceApplicationType.isAB()) {
            startAutomaticAssociationOfJoints(calcFibLogicalSupport);
            startChecksAfterFibLogicalCalculation(calcFibLogicalSupport);
        }

        doPostCalcActions(calcFibLogicalSupport);
        CalcLoggingUtils.logEndOfCalc(calcFibLogicalSupport);
    }
}

È possibile saltare questa fase impostando il seguente campo a true: 

calcFibersLogicalConfig.hasToSkipPrePhase()

In ordine vengono eseguite le bonifiche a seguire:

String report = serviceReclamationFibers.deleteIncorrectRCFByDrawing(calcFibersLogicalConfig.getDrawing());

Elimina tutte le Fibre Fisiche non connesse ad una sezione del progetto e quelle connesse a sezioni di altri progetti.

serviceReclamationFibers.reclamationFksInPrimaryCables(calcFibersLogicalConfig.getDrawing());

Rimuove gli FK delle aree GC/CNO dai cavi di primaria del progetto, quindi mette a null i campi fk_gc e fk_cno.

 

Fasi del Calcolo

1. Fase Preliminare

La fase preliminare (doPreCalcPhase) verifica se il check deve essere eseguito e, in caso affermativo:

  • Esegue eventuali bonifiche pre-calcolo.

  • Avvia i controlli preliminari di progetto, tra cui troviamo la cancellazione delle fibre in caso di calcolo "Col Si".

  • Se il calcolo proviene da un'importazione NT2Star, inizializza la configurazione specifica per NT2.

private void doPreCalcPhase(CalcFibersLogicalConfig calcFibersLogicalConfig) throws GisfoException {
    if (checkPrePhase(calcFibersLogicalConfig)) return;

    doPreCalcReclamations(calcFibersLogicalConfig);
    startProjectPreliminaryChecks(calcFibersLogicalConfig);
    
    if (calcFibersLogicalConfig.isNT2Star()) {
        CalcFibLogicalSupport calcFibLogicalSupport = new CalcFibLogicalSupport(null, calcFibersLogicalConfig);
        doInitializationForNT2(calcFibLogicalSupport);
    }
}

2. Generazione delle Fibre Secondarie

Il metodo generateNewSecondaryFibers crea nuove fibre logiche madri secondarie e, se necessario, esegue controlli sugli Splitter secondari.

private CalcFibLogicalSupport generateNewSecondaryFibers(CalcFibersLogicalConfig calcFibersLogicalConfig) throws GisfoException {
    CalcFibLogicalSupport calcFibLogicalSupport = new CalcFibLogicalSupport(null, calcFibersLogicalConfig);
    
    if (serviceApplicationType.isAB() || serviceApplicationType.isGP())
        serviceSplitterSecondario.checkSecondarySplittersByConfig(calcFibersLogicalConfig);
    
    if (calcFibersLogicalConfig.hasToSkipPrePhase()) return calcFibLogicalSupport;
    
    createNewFibersLogical(calcFibersLogicalConfig);
    return calcFibLogicalSupport;
}

3. Calcoli Addizionali e Associazione dei Giunti

Dopo la generazione delle fibre secondarie, vengono eseguite operazioni aggiuntive, tra cui:

  • Verifica e associazione degli splitter primari e secondari.

  • Aggiornamento delle giunzioni.

  • Eventuale avvio del calcolo delle fibre primarie.

4. Azioni Post-Calcolo

Infine, vengono eseguite azioni di pulizia e aggiornamento:

  • doPostCalcActions: registra il completamento del calcolo e aggiorna le giunzioni integrative della secondaria.

  • cleanJunctionsByCalcConfiguration: verifica e pulisce eventuali giunzioni collegate a fibre danneggiate.

1.1 Associazione Cavi e Controlli sui Nodi

Metodo: performCableAssociationAndNodeChecks

  • Verifica se la configurazione riguarda un singolo nodo (calcFibersLogicalConfig.getOfSingleNode()).

  • In caso contrario, inizializza un nuovo oggetto AssociatedFkCnoFkGcInCables per gestire le associazioni di cavi.

  • Effettua i calcoli sulle associazioni di cavo e aggiorna il reportManager.

  • Recupera i nodi non modificabili e li imposta nel DTO di configurazione logica delle fibre.

  • Avvia controlli di multi-proprietà con startMultiOwnershipChecks.

  • Restituisce la lista aggiornata dei nodi reclamati.

1.2 Pulizia delle Giunzioni

Metodo: startCleaningJunction

  • Se la configurazione riguarda un singolo nodo e la pulizia delle giunzioni è abilitata, chiama cleaningFibersLogicalByNode.

  • Se la pulizia delle giunzioni è attiva per l'intero disegno, chiama cleaningFibersLogicalByDrawing.

  • Se vi sono nodi reclamati, effettua la pulizia su una lista specifica di nodi.

1.3 Controllo Multi-Proprietà sui Nodi

Metodo: startMultiOwnershipChecks

  • Recupera il bean CheckerMultiOwnershipPcabNodes dal contesto dell'applicazione.

  • Se il tipo di applicazione è AB, esegue un controllo multi-proprietà sul disegno.

  • Se il tipo di applicazione è GP, verifica solo la configurazione dei nodi.

1.4 Creazione Automatica di Porte e Giunzioni

Metodo: startAutomaticAssociationOfJoints

  • Registra un messaggio di log.

  • Crea automaticamente le porte delle fibre con serviceFibPorts.createAutomaticFibPorts.

  • Crea automaticamente le giunzioni con serviceFibJoints.createAutomaticFibJoints.

  • Aggiorna il report manager con le nuove giunzioni.

  • Se la configurazione non riguarda un singolo nodo, avvia il recupero delle giunzioni in fibra.

1.5 Pulizia e Gestione delle Fibers Logical

Metodo: setupOccupatedFibersLogical

  • Imposta lo stato delle giunzioni per le fibre occupate.

  • Recupera tutte le fibers logical associate al disegno.

  • Identifica i nodi iniziali delle fibers logical da eliminare.

  • Effettua la pulizia dei nodi iniziali con cleaningFibersLogicalByList.

1.6 Creazione di Nuove Fibers Logical

Metodo: createNewFibersLogical

  • Registra un messaggio di log sulla creazione delle fibers logical.

  • Recupera i nodi per cui creare nuove fibers logical.

  • Avvia la creazione delle fibers logical utilizzando createNewFibersLogicalForFibPcabNodes.

1.7 Eliminazione di Fibers Logical

Metodi: deleteFibersLogicalByNode, deleteFibersLogicalByFkFibersLogical

  • Eliminano le fibers logical associate a un nodo o a un identificatore specifico.

  • Eliminano le giunzioni associate alle fibers logical, se presenti.

  • Aggiornano il database per riflettere la rimozione delle fibers logical.


2. Interazioni tra Componenti

2.1 Servizi e Componenti Coinvolti

  • areaCoperturaService: Recupera i nodi non modificabili.

  • reportManager: Registra informazioni e risultati delle operazioni.

  • serviceFibPorts e serviceFibJoints: Gestiscono rispettivamente porte e giunzioni in fibra.

  • mapperPcabNodes: Recupera e aggiorna informazioni sui nodi.

  • mapperFiber: Interagisce con il database per operazioni sulle fibers logical.

2.2 Diagramma delle Interazioni

(Da completare con diagrammi UML se necessario.)


3. Configurazione e Parametri

3.1 Parametri di Input

  • CalcFibersLogicalConfig: Configurazione dell'operazione sulle fibers logical.

  • CalcFibLogicalSupport: Supporto per operazioni di calcolo.

3.2 Parametri di Output

  • Lista di PcabNodes: Nodi aggiornati dopo le operazioni di pulizia e associazione.

  • FibersLogical aggiornate: Nuove fibers logical create nel database.