Avvio calcolo fibre
Nel Service ServiceCalcFibersLogical vado ad effettuare varie operazioni per avviare la procedura del calcolo fibre.
Il metodo iniziale è tryCalcFiberLogical che gestisce eventuali eccezzioni, a seguire c'è il metodo che avvia le varie inizializzazioni calcFibersLogical e chiama il metodo di avvio del calcolo andando a ritornare il risultato del report. Il report può essere sincrono o asincrono, a seconda della modalità ritornerà il messaaggio i operazione avviata o direttamente il report.
Da calcFibersLogical si passa a startCalcFibersLogical dove vengono effettuati i precheck, quelli inibiti da skipPreCheck, e dato il config inizializzato con i dati del DTO si va a istanziare il bean corretto.
Ogni bean implementa un metodo run che andrà a chiamare il metodo iniziale del tipo di calcolo.
A seconda del tipo potrà essere avviato un thread o meno, mi aspetto che eventuali asincronie vengano gestite dai singoli run di ogni tipo di calcolo.
CalcFibersLogical
Tutti i service di Avvio calcolo fibre implementano l'interfaccia CalcFibersLogical questa impone che tutti i service abbiano un metodo run per avviare il calcolo. Ed espongano una stringa per identificare il tipo di calcolo a cui ogni Service fa riferimento.
Secondaria
Tutti i calcoli di secondaria vengono inizializzati in CalcSecondaryFibersLogical.runCalculationFibersLogical questo metodo si occupa di verificare la presenza del drawing e del nome operatore. Per grecia di effettuare controlli sui PCP del progetto.
Verificare che non ci siano aree di modifica aperte sul progetto. Verificare la compatibilità del nodo selezionato in caso di calcolo di secondaria per singolo nodo. Controllare che il calcolo non sia già in corso ed eventualmente dare un errore.
Aggiornare il dettaglio del progetto in modo da far risultare il calcolo in corso per quel progetto.
In caso di calcolo per Area inizializza la lista dei nodi selezionati in area.
E come ultima operazione avvia il thread di calcolo fibre di secondaria, tutti i calcoli di secondaria sono asincroni.
Il primo metodo effettivo del calcolo è ServiceFibersLogical.fixFibersLogicalOfAProject, raggiunto questo metodo il calcolo è completamente in corso.
Molti calcoli implementano l'avvio della Secondaria, in particolare il calcolo ALL quindi primaria più secondaria ed i calcoli per Area. Alcuni calcoli si avviano solo per determinati ambienti per implementare questa gestione bisogna definire i runningEnviroments nei services.
@Override
public Set<String> getRunningEnvironments() {
return new HashSet<>(Collections.singletonList(ServiceApplicationType.APPLICATION_TYPE_GP));
}
Primaria
Il calcolo di primaria essendo sincrono ha molti meno controlli, non imposta il flag di calcolo in corso, e ritorno subito un report del lavoro svolto.
La chiamata è gestita da CalcPrimaryFibersLogical, nel suo run viene chiamato direttamente ServiceRCablesFibersPrimaria.associatesRCablesFibersPrimariaToFibersLogicalByDrawing, in questo metodo il calcolo di primaria è in corso.