Skip to main content

Calcolo generale

Introduzione

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 e primarie, con particolare attenzione ai controlli preliminari e alle azioni post-calcolo.

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 dei giunti.

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

Fasi del Calcolo

1. Fase Preliminare

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

  • Esegue eventuali bonifiche pre-calcolo.

  • Avvia i controlli preliminari di progetto.

  • 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 secondarie e, se necessario, esegue controlli sui ripartitori 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.