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, chiama
cleaningFibersLogicalByDrawing. -
Se vi sono nodi reclamati, effettua la pulizia su una lista specifica di nodi.
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à sul disegno. -
Se il tipo di applicazione è
GP, verifica solo la configurazione dei nodi.
1.4 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 con
cleaningFibersLogicalByList.
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 utilizzando
createNewFibersLogicalForFibPcabNodes.
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.1 Servizi e Componenti Coinvolti
-
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.1 Parametri di Input
-
CalcFibersLogicalConfig: Configurazione dell'operazione sulle fibers logical. -
CalcFibLogicalSupport: Supporto per operazioni di calcolo.
3.2 Parametri di Output
-
Lista di
PcabNodes: Nodi aggiornati dopo le operazioni di pulizia e associazione. -
FibersLogicalaggiornate: Nuove fibers logical create nel database.