Untitled
unknown
java
2 years ago
4.9 kB
8
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