Hallo zusammen,
ich habe folgenden Code. Dieser Code prüft das Feld von einem RuleConditionComponent-Objekt ab (ConditionState).
1) Heißt ruleConditionComponent.getFieldName() dem Feldname (in diesem Fall "NAME")
2) Danach welchen (ConditionState) das Feld hat.
Derzeit habe ich von einer Klasse diese Abfrage zig Mal (für jedes Feld), also statt "NAME", dann "EMAIL" usw.
Die Frage ist nun, kann man diesen Code irgendwie dynamisch programmieren?
Also:
a) eine Schleife über alle Felder einer Klasse
b) Prüfen, ob das Feld so heißt, wie ruleConditionComponent.getFieldName()
c) ruleConditionComponent.getState().equals(RuleConditionComponent.ConditionState.EQUAL.toString() -> Dieser Code bleibt dann eben bestehen für jeden Zustand...
c) Wenn b) richtig ist, dann von diesem Feld den Wert nehmen und mit dem Wert von ruleConditionComponent.getValue() vergleichen
-> Also was ich bräuchte:
a) Von newObjectForCheck.getRequest().getName() -> Den getName dynamisch halten und bei Schleifendurchlauf die nächste Property der Klasse nehmen...
b) Request.EntityField.NAME.getFieldName() -> Hier habe ich für jede Propertie einen String angelegt bisher, der den Namen der Property in einen String schreibt. Dies müsste ebenfalls irgendwie automatisch gehalten werden. Gibt es hier nicht Annotationen über der Property selbst? (sowas habe ich schon Mal gesehn)
Danke für die Hilfe
ich habe folgenden Code. Dieser Code prüft das Feld von einem RuleConditionComponent-Objekt ab (ConditionState).
1) Heißt ruleConditionComponent.getFieldName() dem Feldname (in diesem Fall "NAME")
2) Danach welchen (ConditionState) das Feld hat.
Derzeit habe ich von einer Klasse diese Abfrage zig Mal (für jedes Feld), also statt "NAME", dann "EMAIL" usw.
Die Frage ist nun, kann man diesen Code irgendwie dynamisch programmieren?
Also:
a) eine Schleife über alle Felder einer Klasse
b) Prüfen, ob das Feld so heißt, wie ruleConditionComponent.getFieldName()
c) ruleConditionComponent.getState().equals(RuleConditionComponent.ConditionState.EQUAL.toString() -> Dieser Code bleibt dann eben bestehen für jeden Zustand...
c) Wenn b) richtig ist, dann von diesem Feld den Wert nehmen und mit dem Wert von ruleConditionComponent.getValue() vergleichen
-> Also was ich bräuchte:
a) Von newObjectForCheck.getRequest().getName() -> Den getName dynamisch halten und bei Schleifendurchlauf die nächste Property der Klasse nehmen...
b) Request.EntityField.NAME.getFieldName() -> Hier habe ich für jede Propertie einen String angelegt bisher, der den Namen der Property in einen String schreibt. Dies müsste ebenfalls irgendwie automatisch gehalten werden. Gibt es hier nicht Annotationen über der Property selbst? (sowas habe ich schon Mal gesehn)
Java:
///////////////////
// NAME
///////////////////
if (ruleConditionComponent.getFieldName()
.equals(Request.ENTITY_NAME_SPACE + Request.EntityField.NAME.getFieldName())) {
if (newObjectForCheck.getRequest().getName() == null)
return false;
if (ruleConditionComponent.getState().equals(RuleConditionComponent.ConditionState.EQUAL.toString())) {
if (newObjectForCheck.getRequest().getName().equalsIgnoreCase(ruleConditionComponent.getValue())) {
return true;
}
}
if (ruleConditionComponent.getState().equals(RuleConditionComponent.ConditionState.NOT_EQUAL.toString())) {
if (!newObjectForCheck.getRequest().getName().equalsIgnoreCase(ruleConditionComponent.getValue())) {
return true;
}
}
if (ruleConditionComponent.getState().equals(RuleConditionComponent.ConditionState.CONTAINS.toString())) {
if (newObjectForCheck.getRequest().getName().toLowerCase()
.contains(ruleConditionComponent.getValue().toLowerCase())) {
return true;
}
}
if (ruleConditionComponent.getState()
.equals(RuleConditionComponent.ConditionState.NOT_CONTAINS.toString())) {
if (!newObjectForCheck.getRequest().getName().toLowerCase()
.contains(ruleConditionComponent.getValue().toLowerCase())) {
return true;
}
}
}
Danke für die Hilfe