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