Untitled

mail@pastecode.io avatar
unknown
java
2 months ago
4.9 kB
2
Indexable
Never
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;
}
Leave a Comment