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
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 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
AssociatedFkCnoFkGcInCablesper 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,drawing, chiamacleaningFibersLogicalByDrawing. -
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
CheckerMultiOwnershipPcabNodesdal contesto dell'applicazione. -
Se il tipo di applicazione è
AB, esegue un controllo multi-proprietà suldisegno.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.
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 concleaningFibersLogicalByList.
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 utilizzandocreateNewFibersLogicalForFibPcabNodes.
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.15 ServiziDescrizione e Componenti Coinvolticomponenti
-
areaCoperturaService: Recupera i nodi non modificabili. -
reportManager: Registra informazioni e risultati delle operazioni. -
serviceFibPortseserviceFibJoints: 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.5.1 Parametri di Input
-
CalcFibersLogicalConfig: Configurazione dell'operazione sulle fibers logical. -
CalcFibLogicalSupport: Supporto per operazioni di calcolo.
3.5.2 Parametri di Output
-
Lista di
PcabNodes: Nodi aggiornati dopo le operazioni di pulizia e associazione. -
FibersLogicalaggiornate: Nuove fibers logical create nel database.