Avvio calcolo fibre
Nel Serviceservice ServiceCalcFibersLogical vadovengono adeseguite effettuare variediverse operazioni per avviare la procedura deldi calcolo delle fibre.
Il metodo inizialeiniziale, è tryCalcFiberLogical che, gestisce eventuali eccezzioni,eccezioni. a seguire c'èSuccessivamente, il metodo checalcFibersLogical avvia le varie inizializzazioni calcFibersLogicalnecessarie e chiama il metodo di avvio del calcolocalcolo, andando a ritornarerestituendo il risultato del report. IlA seconda della modalità di esecuzione, il report può essere sincrono o asincrono,asincrono: anel secondaprimo dellacaso modalitàviene ritorneràrestituito ildirettamente, messaaggionel isecondo viene indicato che l'operazione avviataè ostata direttamente il report.avviata.
Da calcFibersLogical si passa a startCalcFibersLogical, dove vengono effettuati i precheck,pre-check, salvo quelli inibitiesclusi da skipPreCheck. ,eDopo datol'inizializzazione ildella config inizializzatoconfigurazione con i dati del DTODTO, siviene va a istanziareistanziato il bean corretto.
Ogni bean implementa un metodo run, che andrà a chiamarerichiama il metodo iniziale specifico del tipo di calcolo.
void run(CalcFibersLogicalConfig calcFibersLogicalConfig) throws GisfoException;
A seconda del tipo potràdi calcolo, potrebbe essere avviato un threadthread. o meno, mi aspetto che eventualiEventuali asincronie venganosono gestite direttamente dai singolimetodi run di ogni tipo diciascun calcolo.
Interfaccia CalcFibersLogical
Tutti i serviceservizi di Avvioavvio del calcolo delle fibre implementano l'interfaccia CalcFibersLogical, questache impone chel'implementazione tutti i service abbianodi un metodo run per avviarel'avvio ildel calcolo.calcolo Ede esponganol'esposizione di una stringa peridentificativa identificare ildel tipo di calcolo a cui ogni Serviceservice fa riferimento.
Calcolo della Secondaria
Tutti i calcoli didella secondaria vengono inizializzati in CalcSecondaryFibersLogical.runCalculationFibersLogical. questoQuesto metodo si occupa di verificareverifica la presenza del drawing e del nome operatore.dell'operatore, Per grecia di effettuareesegue controlli sui PCP del progetto.Verificareprogetto e assicura che non ci siano aree di modifica aperteaperte. sulInoltre, progetto. Verificareverifica la compatibilità del nodo selezionato inper caso diil calcolo didella secondaria persu singolo nodo.nodo Controllaree controlla che il calcolo non sia già in corsocorso, ed eventualmente daresegnalando un errore.Aggiornareerrore ilse necessario.
Il dettaglio del progetto inviene modoaggiornato daper farindicare risultareche il calcolo è in corsocorso. per quel progetto.
In caso di calcolo per AreaArea, inizializzaviene inizializzata la lista dei nodi selezionatiselezionati. inInfine, area.Eviene come ultima operazione avviaavviato il thread diper il calcolo fibre didella secondaria, tuttiche iè calcolisempre di secondaria sono asincroni.asincrono.
Il primo metodo effettivo del calcolo è ServiceFibersLogical.. Una volta raggiunto questo fixFibersLogicalOfAProject,fixFibersLogicalOfAProjectmetodometodo, il calcolo è completamente in corso.avviato.
Molti calcoli implementanoincludono l'avvio della Secondaria,secondaria, in particolare il calcolo ALL quindi (primaria più+ secondariasecondaria) ede i calcoli per Area. Alcuni calcoli sisono avvianodisponibili solo per determinati ambientiambienti; per implementaregestire questa gestionedifferenziazione, bisognanei definireservice vengono definiti i runningEnviroments nei services.runningEnvironments.
@Overridepublicdefault Set<String> getRunningEnvironments() {
return new HashSet<>(Arrays.asList(
ServiceApplicationType.APPLICATION_TYPE_AB, ServiceApplicationType.APPLICATION_TYPE_CD, ServiceApplicationType.APPLICATION_TYPE_NS,
ServiceApplicationType.APPLICATION_TYPE_GP, ServiceApplicationType.APPLICATION_TYPE_TIM, ServiceApplicationType.APPLICATION_TYPE_UND
));
}
@Override
public Set<String> getRunningEnvironments() {
return new HashSet<>(Collections.singletonList(ServiceApplicationType.APPLICATION_TYPE_GP));
}
Esiste una versione alternativa del calcolo ALL per la Grecia, che prevede anche l'aggiornamento e la creazione di una procedureOutput.
Calcolo Primaria
Il calcolo didella primariaprimaria, essendo sincronosincrono, ha moltiprevede meno controlli,controlli. nonNon imposta il flag di calcolo in corso,corso e ritornorestituisce subitoimmediatamente un report del lavoro svolto.
La chiamata è gestita da CalcPrimaryFibersLogical,CalcPrimaryFibersLogical, nelil suocui metodo run richiama direttamente ServiceRCablesFibersPrimaria.associatesRCablesFibersPrimariaToFibersLogicalByDrawing, avviando così il calcolo.
Anche per la primaria esiste un service dedicato alla Grecia, che inizializza una procedureOutput collegata al progetto.
Calcolo per Area (GC/PFP/PCP CNO/SCP/PFS)
Il calcolo per Area è l'unico tipo di calcolo che non passa per l'end-point unico, poiché permette all'utente di selezionare più aree di progetto. L'end-point di riferimento è calcolaFibreAreeDiCopertura in AreaCoperturaController. A questo end-point non viene chiamatopassato direttamenteun ServiceRCablesFibersPrimaria.associatesRCablesFibersPrimariaToFibersLogicalByDrawing,DTO, bensì una serie di request params paralleli al normale DTO del calcolo fibre, che vengono poi convertiti in questoun metodoDTO compatibile.
private String calcolaFibreAreaCopertura(List<Long> listPk, CalcFibersLogicalDTO calcFibersLogicalDTO) throws GisfoException {
List<AreaPfs> listAreeCopertura = getAreaPfs(listPk);
List<PcabNodes> pcabNodesInAreaCopertura = checkPcabNodesInAreaCopertura(listAreeCopertura, calcFibersLogicalDTO);
List<PcabCables> pcabCablesInAreaCopertura = mapperPcabCables.getPcabCablesByListFkNode(pcabNodesInAreaCopertura);
return startCalcFibers(calcFibersLogicalDTO, listAreeCopertura, pcabNodesInAreaCopertura, pcabCablesInAreaCopertura);
}
Dopo aver ottenuto gli ID delle aree selezionate dall'utente, vengono individuati i nodi appartenenti a tali aree. I metodi centrali per avviare il calcolo sono tryToCalcFibersOfArea e calcolaFibreAreaCopertura. Quest'ultimo seleziona i cavi e i nodi, salvandoli in CalcFibersLogicalConfig, e passa poi al service di primariaavvio della secondaria, proseguendo direttamente con startCalcFibersLogical per un setup personalizzato.
Calcolo per Nodo
Il nuovo calcolo per nodo, implementato da Unidata, prevede prima alcuni controlli nel metodo checkBeforeCalcFiber. Verifica che non ci siano aree da tablet aperte sul progetto e che il calcolo sia disponibile solo per utilizzi diversi da LAN_TO_LAN e DARK_FIBERS.
Le fibre parzialmente complete vengono cancellate prima dell'avvio del calcolo tramite la query in deleteFibersLogicalDisconnectedByPcabNode.
Nel metodo doCalcFiber, il calcolo può seguire due percorsi in base al valore di useJunctions. Se true, il calcolo procede tramite serviceFiberLogicalNode.calculateNodeCalculationPath(calcFibersLogicalConfig), utilizzando le giunzioni impostate dall'utente. Altrimenti, si utilizza serviceFibersLogical.fixFibersLogicalOfAProject(calcFibersLogicalConfig), operando direttamente su un singolo nodo.
private void doCalcFiber(CalcFibersLogicalConfig calcFibersLogicalConfig) {
startLogForNodeFiberCalculation(calcFibersLogicalConfig);
try {
if (calcFibersLogicalConfig.getUseJunctions())
serviceFiberLogicalNode.calculateNodeCalculationPath(calcFibersLogicalConfig);
else
serviceFibersLogical.fixFibersLogicalOfAProject(calcFibersLogicalConfig);
} catch (Exception e) {
CalcLoggingUtils.logError(e, calcFibersLogicalConfig.getDrawing());
reportManager.append(calcFibersLogicalConfig.getDrawing(), e.getMessage());
}
endLogForNodeFiberCalculation(calcFibersLogicalConfig);
}
Preview Unidata
L'avvio del calcolo con preview è molto simile a quello della primaria. Essendo sincrono, la chiamata viene passata direttamente al metodo che esegue il calcolo.
Calcolo per POP ed Estensione delle Fibre in corso.Grecia
Attualmente, questi due tipi di calcolo sono ancora disponibili, anche se non più utilizzati. Le classi relative al calcolo SLIM sono state rimosse, ad eccezione della loro posizione nell'enum.