Untitled
unknown
java
a year ago
4.9 kB
6
Indexable
private void buildMmiList() { // Pre-elaborazione per creare una mappa da idStat a LogicStatus Map<String, LogicStatus> logicStatusMap = logicStatusList.stream() .collect(Collectors.toMap(ls -> ((LogicStatusSchema) ls).getIdStat(), ls -> ls)); // Iterazione principale per costruire mmis mmiListSchema.forEach(mmiSchema -> { MmiObject mmiObject = new MmiObject(mmiSchema); // Assumendo un costruttore che faccia una copia leggera // Ottimizzazione: Accesso diretto invece di ricerca nel ciclo LogicStatus logicStatus = logicStatusMap.get(mmiSchema.getIdStat()); mmiSchema.getDeviceTypeMmi().forEach(type -> processDeviceTypeMmi(type, mmiObject, logicStatus)); mmis.add(mmiObject); }); } private void processDeviceTypeMmi(DeviceTypeMmi type, MmiObject mmiObject, LogicStatus logicStatus) { DeviceTypeMmiObject typeObject = new DeviceTypeMmiObject(type); // Assumendo un costruttore che faccia una copia leggera type.getStatus().forEach(status -> { String optimizedExpression = optimizeExpression(status.getExpression(), type.getAlias(), logicStatus, mmiObject.getStation()); if (!optimizedExpression.isEmpty()) { StatusObject statusObject = new StatusObject(status); // Assumendo un costruttore che faccia una copia leggera statusObject.setExpression(optimizedExpression); try { ExpressionEvaluation expressionEvaluation = new ExpressionEvaluation(optimizedExpression); statusObject.setExpressionEvaluation(expressionEvaluation); } catch (Exception ex) { loggerSystemService.logLightFile(LogEnumCode.MMIERROR3, "Expression: " + optimizedExpression, ex); } typeObject.getStatusList().add(statusObject); } }); if (!typeObject.getStatusList().isEmpty()) { mmiObject.getDeviceTypes().add(typeObject); } } private String optimizeExpression(String expression, List<Alias> aliases, LogicStatus logicStatus, String station) { if (expression == null || expression.isEmpty()) return ""; // Pre-elaborazione per rimuovere i caratteri non necessari e standardizzare l'espressione expression = expression.replaceAll("\\$", "").toLowerCase().replaceAll(" ", ""); // Sostituire "vero" e "falso" con "1" e "0" expression = expression.replaceAll("\\bfalso\\b", "0").replaceAll("\\bvero\\b", "1"); // Applicare sostituzioni basate su alias e altri criteri specifici for (Alias alias : aliases) { String aliasName = alias.getName().toLowerCase(); String field = alias.getField().toLowerCase(); // Sostituzioni basate sul campo dell'alias switch (field) { case ConstantsMmi.MMI_FIELD_SELEZ: expression = applySelectionReplacement(expression, aliasName); break; case ConstantsMmi.MMI_FIELD_VIS: expression = applyVisibilityReplacement(expression, aliasName); break; case ConstantsMmi.MMI_FIELD_ECC: expression = applyEccReplacement(expression, aliasName); break; default: expression = applyDefaultReplacement(expression, aliasName, logicStatus, field); break; } } return expression; } private String applySelectionReplacement(String expression, String aliasName) { // Esempio di sostituzione per il campo selezione return expression.replaceAll("\\b" + ConstantsMmi.MMI_SEL + "\\b", "1") .replaceAll("\\b" + ConstantsMmi.MMI_SELN + "\\b", "1") .replaceAll("\\b" + ConstantsMmi.MMI_SELR + "\\b", "1") .replaceAll("\\b" + ConstantsMmi.MMI_NOSEL + "\\b", "0") .replaceAll("\\b" + aliasName + "\\b", "0"); } private String applyVisibilityReplacement(String expression, String aliasName) { // Sostituzioni per visibilità return expression.replaceAll("\\b" + ConstantsMmi.MMI_VIS + "\\b", "1") .replaceAll("\\b" + ConstantsMmi.MMI_NOVIS + "\\b", "0") .replaceAll("\\b" + aliasName + "\\b", "1"); } private String applyEccReplacement(String expression, String aliasName) { // Sostituzioni per ecc. return expression.replaceAll("\\b" + ConstantsMmi.MMI_ECC + "\\b", "1") .replaceAll("\\b" + ConstantsMmi.MMI_NOECC + "\\b", "0") .replaceAll("\\b" + aliasName + "\\b", "0"); } private String applyDefaultReplacement(String expression, String aliasName, LogicStatus logicStatus, String field) { // Gestione di sostituzioni più complesse basate su logicStatus e altri fattori // Questa parte può essere adattata in base alle regole specifiche di trasformazione dell'espressione return expression; }
Editor is loading...
Leave a Comment