Skip to main content

Avvio calcolo fibre

Nel service ServiceCalcFibersLogical vengono eseguite diverse operazioni per avviare la procedura di calcolo delle fibre.

Disponibile anche nel video corso Lezione 2 - Avvio calcolo fibre

Il metodo iniziale, tryCalcFiberLogical, gestisce eventuali eccezioni. Successivamente, il metodo calcFibersLogical avvia le inizializzazioni necessarie e chiama il metodo di avvio del calcolo, restituendo il risultato del report. A seconda della modalità di esecuzione, il report può essere sincrono o asincrono: nel primo caso viene restituito direttamente, nel secondo viene indicato che l'operazione è stata avviata.

Da calcFibersLogical si passa a startCalcFibersLogical, dove vengono effettuati i pre-check, salvo quelli esclusi da skipPreCheck. Dopo l'inizializzazione della configurazione con i dati del DTO, viene istanziato il bean corretto. Ogni bean implementa un metodo run, che richiama il metodo iniziale specifico del tipo di calcolo.

void run(CalcFibersLogicalConfig calcFibersLogicalConfig) throws GisfoException;

A seconda del tipo di calcolo, potrebbe essere avviato un thread. Eventuali asincronie sono gestite direttamente dai metodi run di ciascun calcolo.

Interfaccia CalcFibersLogical

Tutti i servizi di avvio del calcolo delle fibre implementano l'interfaccia CalcFibersLogical, che impone l'implementazione di un metodo run per l'avvio del calcolo e l'esposizione di una stringa identificativa del tipo di calcolo a cui ogni service fa riferimento.

Calcolo Secondaria

Tutti i calcoli della secondaria vengono inizializzati in CalcSecondaryFibersLogical.runCalculationFibersLogical. Questo metodo verifica la presenza del drawing e del nome dell'operatore, assicura che non ci siano aree di modifica aperte e per Grecia esegue controlli sui PCP del progetto. Inoltre, verifica la compatibilità del nodo selezionato per il calcolo della secondaria su singolo nodo e controlla che il calcolo non sia già in corso, segnalando un errore se necessario.

Il dettaglio del progetto viene aggiornato per indicare che il calcolo è in corso. In caso di calcolo per Area, viene inizializzata la lista dei nodi selezionati. Infine, viene avviato il thread per il calcolo della secondaria, che è sempre asincrono.

Il primo metodo effettivo del calcolo è ServiceFibersLogical.fixFibersLogicalOfAProject. Una volta raggiunto questo metodo, il calcolo è completamente avviato.

Molti calcoli includono l'avvio della secondaria, in particolare il calcolo ALL (primaria + secondaria) e i calcoli per Area. Alcuni calcoli sono disponibili solo per determinati ambienti; per gestire questa differenziazione, nei service vengono definiti i runningEnvironments.

default 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 della primaria, essendo sincrono, prevede meno controlli. Non imposta il flag di calcolo in corso e restituisce immediatamente un report del lavoro svolto.

La chiamata è gestita da CalcPrimaryFibersLogical, il cui 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, CNO)

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 passato un DTO, bensì una serie di request params paralleli al normale DTO del calcolo fibre, che vengono poi convertiti in un DTO 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 avvio 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 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.