GUI Meldungen Ausgabe

This commit is contained in:
2025-08-26 14:22:54 +02:00
parent d63ecc3fc1
commit c8e088fd1e
4 changed files with 223 additions and 131 deletions

View File

@@ -5,6 +5,8 @@ import at.vvo.omds.client.gui.api.calc.CalculateRequestAuskunftService;
import at.vvo.omds.client.gui.api.SOAPConnector; import at.vvo.omds.client.gui.api.SOAPConnector;
import at.vvo.omds.types.omds3.r2025_05.common.*; import at.vvo.omds.types.omds3.r2025_05.common.*;
import at.vvo.omds.types.omds3.r2025_05.on2antrag.common.*; import at.vvo.omds.types.omds3.r2025_05.on2antrag.common.*;
import com.sun.xml.messaging.saaj.SOAPExceptionImpl;
import javafx.animation.PauseTransition;
import javafx.application.Application; import javafx.application.Application;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.geometry.Pos; import javafx.geometry.Pos;
@@ -15,6 +17,7 @@ import javafx.scene.layout.*;
import javafx.scene.paint.Paint; import javafx.scene.paint.Paint;
import javafx.scene.text.*; import javafx.scene.text.*;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.util.Duration;
import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.DatatypeFactory;
@@ -22,6 +25,7 @@ import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigInteger; import java.math.BigInteger;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
public class AllinOneView extends Application { public class AllinOneView extends Application {
@@ -66,10 +70,23 @@ public class AllinOneView extends Application {
try { try {
response.set(s.aprioriAuskunft(stichtag.get(), "042")); response.set(s.aprioriAuskunft(stichtag.get(), "042"));
} catch (NoSuchElementException ex) { } catch (NoSuchElementException ex) {
logFlow.getChildren().add(new Text("Kein Verkaufsoffenes Produkt an dem Datum: " + controlBox[0].getChildren().clear();
controlBox[0].getChildren().add(dp);
vpBox.getItems().clear();
Text text = new Text("Kein Verkaufsoffenes Produkt an dem Datum: " +
stichtag.get().toString().substring(0, stichtag.get().toString().length() - 1) + stichtag.get().toString().substring(0, stichtag.get().toString().length() - 1) +
System.lineSeparator())); System.lineSeparator());
throw new NoSuchElementException("Kein Verkaufsoffenes Produkt an dem Datum: " + stichtag.get()); text.setFill(Paint.valueOf("#dd0000"));
logFlow.getChildren().add(text);
throw new NoSuchElementException(ex.getMessage());
} catch (SOAPExceptionImpl ex) {
HBox errorBox = new HBox();
errorBox.setAlignment(Pos.CENTER);
errorBox.setPadding(new Insets(10, 10, 10, 10));
errorBox.getChildren().add(new Text("Keine Verbindung zum Server möglich!"));
controlBox[0].getChildren().add(errorBox);
} }
newCalcRequestControlBox.setVisible(true); newCalcRequestControlBox.setVisible(true);
@@ -174,7 +191,8 @@ public class AllinOneView extends Application {
itemAttribute.addItemInfo(newSelection, infoBox); itemAttribute.addItemInfo(newSelection, infoBox);
infoBoxFromItem = itemAttribute.getInfoBoxFromItem(); infoBoxFromItem = itemAttribute.getInfoBoxFromItem();
// addItemInfo(newSelection, infoBox); // addItemInfo(newSelection, infoBox);
System.out.println(newSelection.getValue().getClass().getName()); }else{
infoBox.getChildren().removeAll(infoBox.getChildren());
} }
}); });
@@ -188,6 +206,7 @@ public class AllinOneView extends Application {
if (item == null || empty) { if (item == null || empty) {
setText(null); setText(null);
setGraphic(null); setGraphic(null);
setStyle("");
} else { } else {
HBox cellBox = new HBox(); HBox cellBox = new HBox();
Button include = new Button("+"); Button include = new Button("+");
@@ -223,12 +242,29 @@ public class AllinOneView extends Application {
label.setMaxWidth(Double.MAX_VALUE); label.setMaxWidth(Double.MAX_VALUE);
if (getTreeItem().getValue().getClass().equals(VerkaufsproduktType.class) || if (!(getTreeItem().getValue() instanceof VerkaufsproduktType)) {
System.out.println(((ProduktbausteinType) getTreeItem().getValue()).getBezeichnung());
System.out.println(timesItemisIncludedById.get(
((ProduktbausteinType) getTreeItem().getValue()).getId()) != null);
System.out.println("...");
System.out.println(((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() != null
&& ((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() >=
timeItemIsIncludedByParent(getTreeItem().getParent(),
((ProduktbausteinType) getTreeItem().getValue()).getId()));
System.out.println("...");
System.out.println(timeItemIsIncludedByParent(getTreeItem().getParent(),
((ProduktbausteinType) getTreeItem().getValue()).getId()));
System.out.println("...");
System.out.println(((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() != null);
System.out.println("-----------------------------------------------------------------------------");
}
if (getTreeItem().getValue() instanceof VerkaufsproduktType ||
getTreeItem().getValue().getClass().equals(APrioriVerkaufsproduktType.class)) { getTreeItem().getValue().getClass().equals(APrioriVerkaufsproduktType.class)) {
cellBox.getChildren().addAll(label); cellBox.getChildren().addAll(label);
} else if (timesItemisIncludedById.get( } else if (timesItemisIncludedById.get(
((ProduktbausteinType) getTreeItem().getValue()).getId()) != null ((ProduktbausteinType) getTreeItem().getValue()).getId()) != null
&& ((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() == && ((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() != null
&& ((ProduktbausteinType) getTreeItem().getValue()).getMaxVorkommen() <=
timeItemIsIncludedByParent(getTreeItem().getParent(), timeItemIsIncludedByParent(getTreeItem().getParent(),
((ProduktbausteinType) getTreeItem().getValue()).getId())) { ((ProduktbausteinType) getTreeItem().getValue()).getId())) {
include.setDisable(true); include.setDisable(true);
@@ -238,7 +274,6 @@ public class AllinOneView extends Application {
cellBox.getChildren().addAll(label, spacer, include, spacer2, remove); cellBox.getChildren().addAll(label, spacer, include, spacer2, remove);
} }
include.setOnAction(e -> { include.setOnAction(e -> {
if (isNotIncluded.contains(getTreeItem())) { if (isNotIncluded.contains(getTreeItem())) {
label.setFont(Font.font("System", label.getFont().getSize())); label.setFont(Font.font("System", label.getFont().getSize()));
@@ -261,8 +296,7 @@ public class AllinOneView extends Application {
refreshTimesItemisIncludedById(tv.getRoot()); refreshTimesItemisIncludedById(tv.getRoot());
} else { } else {
TreeItem<Object> parent = getTreeItem().getParent(); TreeItem<Object> parent = getTreeItem().getParent();
TreeItem<Object> clone = TreeItem<Object> clone = null;
null;
try { try {
clone = treeHelper.cloneTreeItem( clone = treeHelper.cloneTreeItem(
treeHelper.findTreeItem((ProduktbausteinType) item, originalRoot)); treeHelper.findTreeItem((ProduktbausteinType) item, originalRoot));
@@ -308,6 +342,28 @@ public class AllinOneView extends Application {
timesItemisIncludedById.clear(); timesItemisIncludedById.clear();
refreshTimesItemisIncludedById(tv.getRoot()); refreshTimesItemisIncludedById(tv.getRoot());
}); });
if(((ProduktbausteinType) item).getMeldungen() != null && !((ProduktbausteinType) item).getMeldungen().isEmpty()) {
AtomicBoolean symboleAdded = new AtomicBoolean(false);
Text symbole = new Text("\u26A0 ");
symbole.setFont(Font.font("System", FontWeight.BOLD, symbole.getFont().getSize() + 2));
((ProduktbausteinType) item).getMeldungen().forEach(m -> {
if(m.getErrorType().equals(BigInteger.ONE)) {
symbole.setFill(Paint.valueOf("#aa3333"));
symboleAdded.set(true);
}
if (m.getErrorType().equals(BigInteger.TWO) && !symboleAdded.get()) {
symbole.setFill(Paint.valueOf("#ccbb00"));
}
});
cellBox.getChildren().addFirst(symbole);
}else {
if (cellBox.getChildren().getFirst() instanceof Text && ((Text)cellBox.getChildren().getFirst()).getText().equals("\u26A0")) {
cellBox.getChildren().removeFirst();
}
}
setGraphic(cellBox); setGraphic(cellBox);
setText(null); setText(null);
} }
@@ -327,22 +383,31 @@ public class AllinOneView extends Application {
timesItemisIncludedById = treeHelper.getTimesItemisIncludedById(); timesItemisIncludedById = treeHelper.getTimesItemisIncludedById();
newRoot.setExpanded(true); newRoot.setExpanded(true);
isNotIncluded.clear(); isNotIncluded.clear();
if (calcResponse.getBerechnungsantwort().getVerkaufsprodukt().getMeldungen() == null || if (!isMeldungVorhanden(calcResponse.getBerechnungsantwort().getVerkaufsprodukt())) {
calcResponse.getBerechnungsantwort().getVerkaufsprodukt().getMeldungen().isEmpty()) {
Text text = new Text(LocalDateTime.now() + ": Gültiges Verkaufsprodukt " + System.lineSeparator()); Text text = new Text(LocalDateTime.now() + ": Gültiges Verkaufsprodukt " + System.lineSeparator());
text.setFill(Paint.valueOf("#00bb33")); text.setFill(Paint.valueOf("#00bb33"));
logFlow.getChildren().add(text); logFlow.getChildren().add(text);
treeBox.setStyle("-fx-border-color: #00bb33"); treeBox.setStyle("-fx-border-color: #00bb33");
PauseTransition pause = new PauseTransition(Duration.seconds(3));
pause.setOnFinished(ep -> treeBox.setStyle("-fx-border-color: #000000"));
pause.play();
}else { }else {
newRoot = treeHelper.addAprioriToCalc(newRoot, originalRoot); Text text = new Text(LocalDateTime.now() + ": Kein Gültiges Verkaufsprodukt " + System.lineSeparator());
newRoot = treeHelper.sortTree(newRoot); text.setFill(Paint.valueOf("#aa3333"));
tv.setRoot(treeHelper.addAprioriToCalc(newRoot, originalRoot)); logFlow.getChildren().add(text);
timesItemisIncludedById.clear();
refreshTimesItemisIncludedById(tv.getRoot());
} }
newRoot = treeHelper.addAprioriToCalc(newRoot, originalRoot);
newRoot = treeHelper.sortTree(newRoot);
tv.setRoot(newRoot);
timesItemisIncludedById.clear();
refreshTimesItemisIncludedById(tv.getRoot());
tv.refresh(); tv.refresh();
for (int j = 0; j < calcResponse.getBerechnungsantwort().getVerkaufsprodukt().getMeldungen().size(); j++) { for (int j = 0; j < calcResponse.getBerechnungsantwort().getVerkaufsprodukt().getMeldungen().size(); j++) {
@@ -406,13 +471,13 @@ public class AllinOneView extends Application {
logFlow.setDisable(true); logFlow.setDisable(true);
logFlow.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); logFlow.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
logFlow.setPadding(new Insets(20)); logFlow.setPadding(new Insets(20));
logFlow.setStyle("-fx-border-color: black; -fx-background-color: white;");
HBox.setMargin(logFlow, new Insets(10, 20, 10, 20)); HBox.setMargin(logFlow, new Insets(10, 20, 10, 20));
logPane.setContent(logFlow); logPane.setContent(logFlow);
logPane.setFitToWidth(true); logPane.setFitToWidth(true);
logPane.setFitToHeight(true); logPane.setFitToHeight(true);
logPane.setMaxHeight(200); logPane.setMaxHeight(200);
logPane.setStyle("-fx-border-color: black; -fx-background-color: white;");
HBox.setHgrow(logPane, Priority.ALWAYS); HBox.setHgrow(logPane, Priority.ALWAYS);
logWrapper.getChildren().add(logPane); logWrapper.getChildren().add(logPane);
@@ -423,19 +488,33 @@ public class AllinOneView extends Application {
return vbox; return vbox;
} }
// private TreeItem<Object> cleanTree(TreeItem<Object> original) { private boolean isMeldungVorhanden(ProduktbausteinType produkt) {
// if (isNotIncluded.contains(original)) { if (produkt != null && produkt.getMeldungen() != null && !produkt.getMeldungen().isEmpty()) {
// return null; return true;
// } }
for (ProduktbausteinType child : produkt.getBausteine()){
if(isMeldungVorhanden(child)) return true;
}
return false;
}
// private void addMeldungen(TreeItem<Object> newRoot, TextFlow logFlow, Node tv) {
// if (!((ProduktbausteinType)newRoot.getValue()).getMeldungen().isEmpty()) {
// PauseTransition pause = new PauseTransition(Duration.seconds(5));
// //
// TreeItem<Object> newItem = new TreeItem<>(original.getValue()); // pause.play();
// for (TreeItem<Object> child : original.getChildren()) { //
// TreeItem<Object> cleanedChild = cleanTree(child); // for (ServiceFault s : ((ProduktbausteinType)newRoot.getValue()).getMeldungen()) {
// if (cleanedChild != null) { // logFlow.getChildren().add(new Text(s.getErrorMsg() + System.lineSeparator()));
// newItem.getChildren().add(cleanedChild); //
// if (tv != null) tv.setStyle("-fx-background-color: #aa3333");
// }
// }
// if (!newRoot.getChildren().isEmpty()) {
// for (TreeItem<Object> child : newRoot.getChildren()) {
// addMeldungen(child, logFlow, child.getGraphic());
// } // }
// } // }
// return newItem;
// } // }
private void includeAddedParent(TreeItem<Object> treeItem) { private void includeAddedParent(TreeItem<Object> treeItem) {
@@ -478,7 +557,7 @@ public class AllinOneView extends Application {
private boolean shouldBeIncluded(TreeItem<Object> treeItem) { private boolean shouldBeIncluded(TreeItem<Object> treeItem) {
return !((isNotIncluded.contains(treeItem.getParent()) || isNotIncluded.contains(treeItem) || return !((isNotIncluded.contains(treeItem.getParent()) || isNotIncluded.contains(treeItem) ||
(((ProduktbausteinType) treeItem.getValue()).getMinVorkommen() == 0 && (((ProduktbausteinType) treeItem.getValue()).getMinVorkommen() != null && ((ProduktbausteinType) treeItem.getValue()).getMinVorkommen() == 0 &&
(timesItemisIncludedById.get(((ProduktbausteinType) treeItem.getValue()).getId()) == null || (timesItemisIncludedById.get(((ProduktbausteinType) treeItem.getValue()).getId()) == null ||
timesItemisIncludedById.get(((ProduktbausteinType) treeItem.getValue()).getId()) == 0))) && timesItemisIncludedById.get(((ProduktbausteinType) treeItem.getValue()).getId()) == 0))) &&
!(treeItem.getValue() instanceof VerkaufsproduktType)); !(treeItem.getValue() instanceof VerkaufsproduktType));

View File

@@ -1,89 +1,70 @@
# Server # Verhalten Server und Client
| Fehlercode | Fehler level | Beschreibung | Reaktion |
|------------|--------------|------------------------------------------------------|----------|
| SA0000 | 2 | Ungültiger Stichtag | react |
| SA0100 | 2 | Ungültige VUNr | react |
| SC0000 | 2 | Ungültiger Baustein | react |
| SC0001 | 2 | Baustein kommt zu oft vor | react |
| SC0002 | 2 | Baustein kommt nicht oft genug vor | react |
| SC0003 | 2 | Baustein ist nicht verkaufsoffen | react |
| SC0004 | 2 | Baustein namespace passt nicht | react |
| SC0005 | 2 | Baustein ID stimmt nicht | react |
| SC0006 | 2 | Baustein kann in der Datenbank nicht gefunden werden | react |
| SC0100 | 2 | Ungültiges Attribut | react |
| SC0101 | 2 | Attribut dem falschen Baustein zugeordnet | react |
| SC0102 | 2 | Attribut value hat einen falschen wert | react |
| SC0103 | 2 | Attribut value ist required aber nicht angegeben | react |
| SC0104 | 2 | Attribut ID stimmt nicht | react |
| SC0105 | 2 | Attribut nicht in der Datenbank vorhanden | react |
# Client ### Prämissen
| Fehlercode | Fehler level | Beschreibung | Reaktion | * Request kann immer vollkommen "dirty" sein, über Kaskade von Prüfungen muss dies validiert werden.
|------------|--------------|------------------------------------|----------| * Immer gültiges XML
| CX0000 | 2 | Ungültiger Response Type | react | * Aufbau des Requests entspricht dem a priori Produktwissen. Wenn dagegen verstoßen wird (Baustein oder Attribut), gibt es
| CA0000 | 2 | Ungültiges Verkaufsprodukt | react | möglichst sprechende Fehlermeldungen. Es ist aber ein Fehler zur Entwicklungszeit, d.h. es darf aber es muss keinen Produktbaum im
| CA0001 | 2 | Verkaufsprodukt falscher typ | react | Response geben, einfache Fehlermeldung genügt. Es ist kein inhaltlicher Konfigurationsfehler, der über einen "schönen"
| CA0002 | 2 | Verkaufsprodukt falsche ID | react | Response an den Client zur Korrektur gegeben werden muss.
| CA0003 | 2 | Verkaufsprodukt falscher namespace | react | * Response darf teilweise "dirty" sein, damit gute Fehlerhinweise möglich sind und der User leicht korrigieren kann.
| CA0100 | 2 | Ungültiger Baustein | react | * Client zeigt den Response an und keine Mischung aus seinem Request und dem Response. Damit
| CA0101 | 2 | Baustein kommt zu oft vor | react | Client und Server wieder synchron sind.
| CA0102 | 2 | Baustein falscher namespace | react | * Das Verhalten könnte Context-gesteuert sein, z.B.:
| CA0103 | 2 | Baustein falsche ID | react | * Im Context "Produktvergleich" werden immer nur Fehlermeldungen geworfen
| CA0104 | 2 | Baustein falscher Typ | react | * Im Context "Antrag", "Vertragsänderung" oder "Einzelkonfiguration" werden Empfehlungen abgegeben.
| CC0000 | 2 | Ungültige Berechnungsantwort | react | * Das Verhalten des Servers könnte sogar Produktabhängig definiert sein: An manchen Bausteinen Variante 1 an
| CC0100 | 2 | Ungültiges Verkaufsprodukt | react | anderen Variante 2 des Verhaltens.(?)
| CC0101 | 2 | Verkaufsprodukt falscher typ | react | * Berechnung nur, wenn die Instanz (Antrag, Vertrag) erfolgreich plausibilisiert.
| CC0102 | 2 | Verkaufsprodukt falsche ID | react | * Unterstützung für "Actions"?
| CC0103 | 2 | Verkaufsprodukt falscher namespace | react | * Verhaltenssteuerung: Im Request kann ein Profil vorgegeben werden. Im Response wird angegeben, ob es berücksichtigt werden konnte, oder Fallbackverhalten.
| CC0200 | 2 | Ungültiger Baustein | react | * Basic - nur Fehlermeldungen, Baum wird nie verändert
| CC0200 | 2 | Baustein falsche ID | react | * Advanced - Fehlermeldungen und Änderungen im Baum (z.B. Anlage von Default-Elementen). Das Verhalten im Baum ist normiert.
| CC0200 | 2 | Baustein falscher Typ | react | * Freestyle - Server reagiert innerhalb der vorgegebenen Möglichkeiten, wie er es an der Stelle für richtig hält. Sprich der
| CC0200 | 2 | Baustein falscher Namespace | react | Produktentwickler legt dies fest und kann das für Bausteine und Attribute festlegen.
* Actions - es werden Actions angeboten, um Korrekturen im Baum vorzunehmen.
### Fehler Code ## Fälle Bausteine
+ 1: Wo ist der Fehler aufgetreten (C → Client)
+ 1: Anfangsbuchstabe der operation (Fehler bei Calculate → Code beginnt mit C) Der Client schickt einen Unbekannten Baustein. Der Server gibt eine Fehlermeldung zurück.
+ 2: Fehler Art (0 → XML Fehler) Der Client schickt einen Baustein mit einem fehlerhaften Attribut. Der Server gibt eine Fehlermeldung zurück.
+ 3: Fehler Kategorie (0 → Ungültiger Baustein) Der Server schickt einen ungültigen Baustein. Der Server gibt eine Fehlermeldung zurück.
+ 4 & 5: Spezifischer Fehler (01 → Baustein kommt zu häufig vor)
### Fehler Level
+ 1: FATAL
+ 2: ERROR
+ 3: WARNING
## Verhalten Der Client schickt zu viele von einem Baustein. A priori erstmal ausgeschlossen, da der
Der Client schickt zu viele von einem Baustein. Der Server könnte: Client über Produktwissen verfügt. Über Plausis in der Instanz kann der Fall trotzdem eintreten.
1) Den Baustein Inaktiv setzen Der Server könnte:
2) Den Baustein ausbessern 1) Fehlermeldung in Oberbaustein senden
3) Den Baustein entfernen 2) Die überzähligen Bausteine auf Inaktiv setzen und mit Fehler markieren
3) Den überzähligen Baustein / die überzähligen Bausteine entfernen
Der Client schickt zu wenig von einem Baustein. Der Server könnte: Der Client schickt zu wenig von einem Baustein. Der Server könnte:
1) Einen Default Baustein hinzufügen 1) Einen Default Baustein (mehrere Default-Bausteine) hinzufügen (er kann dabei die Daten des Requests in den
2) Eine Meldung über den Parent mitgeben Vorschlag einfließen lassen, was der Client nicht kann)
2) Eine Meldung über den Parent mitgeben, der Client ist dann zuständig den Baustein anzulegen.
Der Client schickt einen Unbekannten Baustein. Der Server könnte:
1) Den Unbekannten Baustein Inaktiv wieder mitgeben
2) Den Unbekannten Baustein entfernen
3) Einen ähnlichen Baustein suchen und hinzufügen
Der Client schickt einen Baustein mit einem fehlerhaften Attribut. Der Server könnte:
1) Das Default Attribut hinzufügen
2) Den Baustein inaktiv setzen
3) Das Attribut entfernen
Der Client schickt Bausteine, die sich wiedersprechen. Der Server könnte: Der Client schickt Bausteine, die sich wiedersprechen. Der Server könnte:
1) Einen Priorisieren und den anderen Inaktiv setzen. 1) Fehlermeldung und beide belassen
2) Beide Inaktiv setzen 2) Fehlermeldung und einen priorisieren und den anderen inaktiv setzen.
3) Fehlermeldung und beide inaktiv setzen
Der Client schickt einen Baustein in einem falschen Kontext. Der Server könnte: Der Client schickt einen Baustein in einem falschen Kontext. Der Server könnte:
1) Den Baustein dem richtigen Kontext zuordnen 1) Den Baustein dem richtigen Kontext zuordnen
2) Den Baustein Inaktiv setzen 2) Den Baustein inaktiv setzen
Der Server schickt einen ungültigen Baustein. Der Client könnte:
1) Den Tree Inaktiv setzen
2) Den Baustein Inaktiv setzen
3) Den Baustein weglassen
## Fälle Attribute
Attribut unbekannt - sollte gar nicht auftreten, muss nicht inhaltlich behandelt werden
Wert in Attribut ungültig - Attribut behält den falschen Wert, wird aber mit Fehlermeldung zurückgegeben.
Kardinalität Attribut überschritten:
1) Fehler an Baustein
2) Fehler an überzähligen Attributen
Kardinalität Attribut unterschritten:
1) Fehler an Baustein aber keine automatische Ergänzung
2) Hinweis an Baustein, Ergänzen der fehlenden Attribute mit Defaultwerten.

View File

@@ -7,8 +7,12 @@ import javafx.scene.control.CheckBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.paint.Paint; import javafx.scene.paint.Paint;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.util.Duration; import javafx.util.Duration;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -27,6 +31,32 @@ public class ItemAttribute {
} }
public VBox addItemInfo(TreeItem<Object> newSelection, VBox attributBox) { public VBox addItemInfo(TreeItem<Object> newSelection, VBox attributBox) {
if (((ProduktbausteinType)newSelection.getValue()).getMeldungen() != null && !((ProduktbausteinType)newSelection.getValue()).getMeldungen().isEmpty()){
attributBox.getChildren().removeIf(n -> n.getId().equals("faultsbox"));
VBox faultsBox = new VBox();
for (ServiceFault sf : ((ProduktbausteinType)newSelection.getValue()).getMeldungen()) {
HBox singleFaultBox = new HBox();
singleFaultBox.setPadding(new Insets(10));
Text symbole = new Text("\u26A0 ");
symbole.setFont(Font.font("System", FontWeight.BOLD, symbole.getFont().getSize() + 2));
if (sf.getErrorType().equals(BigInteger.ONE)){
symbole.setFill(Paint.valueOf("#aa3333"));
} else if (sf.getErrorType().equals(BigInteger.TWO)) {
symbole.setFill(Paint.valueOf("#ccbb00"));
}
Label errorText = new Label(sf.getErrorMsg() + System.lineSeparator());
singleFaultBox.getChildren().addAll(symbole, errorText);
faultsBox.getChildren().add(singleFaultBox);
}
attributBox.getChildren().addFirst(faultsBox);
}
for(int j = 0; j < ((ProduktbausteinType)newSelection.getValue()).getAttribute().size(); j++) { for(int j = 0; j < ((ProduktbausteinType)newSelection.getValue()).getAttribute().size(); j++) {
VBox singleAttributBox = new VBox(); VBox singleAttributBox = new VBox();
singleAttributBox.setPadding(new Insets(10)); singleAttributBox.setPadding(new Insets(10));
@@ -281,33 +311,33 @@ public class ItemAttribute {
attributBox.getChildren().add(singleAttributBox); attributBox.getChildren().add(singleAttributBox);
if (((ProduktbausteinType)newSelection.getValue()).getMeldungen() != null // if (((ProduktbausteinType)newSelection.getValue()).getMeldungen() != null
&& !((ProduktbausteinType)newSelection.getValue()).getMeldungen().isEmpty()) { // && !((ProduktbausteinType)newSelection.getValue()).getMeldungen().isEmpty()) {
((ProduktbausteinType)newSelection.getValue()).getMeldungen().forEach(n -> { // ((ProduktbausteinType)newSelection.getValue()).getMeldungen().forEach(n -> {
VBox meldung = new VBox(); // VBox meldung = new VBox();
//
Label code = new Label(); // Label code = new Label();
Label text = new Label(); // Label text = new Label();
Label ref = new Label(); // Label ref = new Label();
//
if (n.getErrorCode() != null) {code = new Label("Error Code: " + n.getErrorCode().toString());} // if (n.getErrorCode() != null) {code = new Label("Error Code: " + n.getErrorCode().toString());}
if (n.getErrorMsg() != null) {text = new Label(n.getErrorMsg());} // if (n.getErrorMsg() != null) {text = new Label(n.getErrorMsg());}
if (n.getElementReference() != null) {ref = new Label(n.getElementReference());} // if (n.getElementReference() != null) {ref = new Label(n.getElementReference());}
//
if (n.getErrorType().equals(BigInteger.ONE)){ // if (n.getErrorType().equals(BigInteger.ONE)){
code.setStyle("-fx-text-fill: red;"); // code.setStyle("-fx-text-fill: red;");
text.setStyle("-fx-text-fill: red;"); // text.setStyle("-fx-text-fill: red;");
ref.setStyle("-fx-text-fill: red;"); // ref.setStyle("-fx-text-fill: red;");
}else if (n.getErrorType().equals(BigInteger.TWO)){ // }else if (n.getErrorType().equals(BigInteger.TWO)){
code.setStyle("-fx-text-fill: #bbbb00;"); // code.setStyle("-fx-text-fill: #bbbb00;");
text.setStyle("-fx-text-fill: #bbbb00;"); // text.setStyle("-fx-text-fill: #bbbb00;");
ref.setStyle("-fx-text-fill: #bbbb00;"); // ref.setStyle("-fx-text-fill: #bbbb00;");
} // }
//
meldung.getChildren().addAll(code, text, ref); // meldung.getChildren().addAll(code, text, ref);
attributBox.getChildren().add(meldung); // attributBox.getChildren().add(meldung);
}); // });
} // }
} }
return attributBox; return attributBox;

View File

@@ -46,6 +46,8 @@ public class BuildCalculateRequestAuskunft {
baustein.setVerkaufsoffenBis(((ProduktbausteinType)treeItem.getValue()).getVerkaufsoffenBis()); baustein.setVerkaufsoffenBis(((ProduktbausteinType)treeItem.getValue()).getVerkaufsoffenBis());
baustein.getAttribute().addAll(((ProduktbausteinType)treeItem.getValue()).getAttribute()); baustein.getAttribute().addAll(((ProduktbausteinType)treeItem.getValue()).getAttribute());
baustein.setTyp(((ProduktbausteinType)treeItem.getValue()).getTyp()); baustein.setTyp(((ProduktbausteinType)treeItem.getValue()).getTyp());
baustein.setMinVorkommen(((ProduktbausteinType)treeItem.getValue()).getMinVorkommen());
baustein.setMaxVorkommen(((ProduktbausteinType)treeItem.getValue()).getMaxVorkommen());
return baustein; return baustein;
} }