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:

        Registra l'inizio del calcolo nei log.

        Esegue la fase preliminare (doPreCalcPhase).

        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.