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,secondarie. Descriveremo con particolare attenzione aile controlliparti preliminaridi eeliminazione allapre calcolo, creazione delle nuove fibre.fibre e occupazione delle fibre fisiche.


Inizializzazione del Servizio

All'avvio dell'applicazione, il metodo init() viene invocato automaticamente grazie all'annotazionein @PostConstruct. inizializza alcune parti di gestione relative al server. Questo il metodo:

  • Registra il servizio ServiceFibersLogical nel gwRegistry.

  • Recupera l'indirizzo IP del server locale.

  • Resetta eventuali calcoli delle fibre logiche rimasti in sospeso.sospeso, solo se avviati dal corrente server.

@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);
    }
}

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 drawing, chiama cleaningFibersLogicalByDrawing.

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

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.

 

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 drawing.

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

1.4 Setup delle fibre occupate

Metodo: setupOccupatedFibersLogical

  • Imposta lo stato delle giunzioni per le fibre occupate.

  • Recupera tutte le fibers logical associate al drawing.

  • Identifica i nodi iniziali delle fibers logical da eliminare.

  • Effettua la pulizia dei nodi iniziali con cleaningFibersLogicalByList.

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;
}

2.1 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.

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.

4.1 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.


5 Descrizione componenti

  • 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.

5.1 Parametri di Input

  • CalcFibersLogicalConfig: Configurazione dell'operazione sulle fibers logical.

  • CalcFibLogicalSupport: Supporto per operazioni di calcolo.

5.2 Parametri di Output

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

  • FibersLogical aggiornate: Nuove fibers logical create nel database.