Skip to content

Commit

Permalink
Verbesserte Validierung
Browse files Browse the repository at this point in the history
Doppelte Elementnamen/Attribute/Methoden sind nicht mehr erlaubt, Fehlerhafte Eingaben werden hervorgehoben
  • Loading branch information
encrypTimM committed Jun 16, 2022
1 parent ec56e98 commit 66f523f
Show file tree
Hide file tree
Showing 11 changed files with 437 additions and 348 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ private static Optional<Einstellungen> laden(Path quelle) {
public final JsonBooleanProperty zeigePackageModifier;
public final JsonBooleanProperty zeigeVoid;
public final JsonBooleanProperty zeigeParameterNamen;
public final JsonBooleanProperty erweiterteValidierungAktivieren;

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// * Konstruktoren *
Expand Down Expand Up @@ -199,6 +200,7 @@ public boolean remove(Object o) {
this.zeigePackageModifier = new JsonBooleanProperty(true);
this.zeigeVoid = new JsonBooleanProperty(false);
this.zeigeParameterNamen = new JsonBooleanProperty(true);
this.erweiterteValidierungAktivieren = new JsonBooleanProperty(true);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,9 @@ private void setzeMenueAktionen(MenueLeisteKomponente menue) {
.bindBidirectional(Einstellungen.getBenutzerdefiniert().zeigeVoid);
menue.getParameternamenAnzeigen().selectedProperty()
.bindBidirectional(Einstellungen.getBenutzerdefiniert().zeigeParameterNamen);
menue.getErweiterteValidierungAktivieren().selectedProperty()
.bindBidirectional(
Einstellungen.getBenutzerdefiniert().erweiterteValidierungAktivieren);
menue.getInfo().setOnAction(e -> {
var info = new InfoAnsicht(programm, rechnerService);
FensterUtil.initialisiereElternFenster(wurzel.getScene().getWindow(), info);
Expand Down Expand Up @@ -618,7 +621,7 @@ private void auswahlEinfuegen() {
umlKopie.getPosition().setY(y);
return umlKopie;
}).toList();
projekteAnsicht.getAngezeigtesProjekt().getDiagrammElemente().addAll(kopie);
projekteAnsicht.fuegeEin(kopie);
}

private void auswahlLoeschen() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

package io.github.aid_labor.classifier.gui;

import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.logging.Level;
import java.util.function.Supplier;
import java.util.logging.Logger;

import com.dlsc.gemsfx.DialogPane;
Expand Down Expand Up @@ -151,9 +150,7 @@ public ReadOnlyBooleanProperty kannKleinerZoomenProperty() {
}

public List<? extends UMLDiagrammElement> getSelektion() {
return selektion.stream().map(node -> {
return node.getUmlElement();
}).toList();
return selektion.stream().map(UMLElementBasisAnsicht::getUmlElement).toList();
}

public BooleanBinding hatSelektionProperty() {
Expand Down Expand Up @@ -321,18 +318,17 @@ private void fuegeHinzu(UMLElementBasisAnsicht<? extends UMLDiagrammElement> ans

if (ansicht.getUmlElement() instanceof UMLKlassifizierer klassifizierer) {
bearbeitenDialogOeffnen(ansicht, klassifizierer,
UMLKlassifiziererBearbeitenDialog.class,
projekt.nameProperty().concat(" > ")
.concat(new When(klassifizierer.nameProperty().isEmpty())
.then(sprache.getText("unbenannt", "Unbenannt"))
.otherwise(klassifizierer.nameProperty())));
.otherwise(klassifizierer.nameProperty())),
() -> new UMLKlassifiziererBearbeitenDialog(klassifizierer, projekt));
} else if (ansicht.getUmlElement() instanceof UMLKommentar kommentar) {
bearbeitenDialogOeffnen(ansicht, kommentar,
UMLKommentarBearbeitenDialog.class,
projekt.nameProperty().concat(" > ")
.concat(sprache.getTextProperty("kommentarBearbeitenTitel",
"Kommentar bearbeiten")));

"Kommentar bearbeiten")),
() -> new UMLKommentarBearbeitenDialog(kommentar));
}

Runnable vorPositionBearbeitung = () -> {
Expand All @@ -356,25 +352,14 @@ private void fuegeHinzu(UMLElementBasisAnsicht<? extends UMLDiagrammElement> ans
}

private <T extends UMLDiagrammElement> void bearbeitenDialogOeffnen(Node ansicht,
T element, Class<? extends Alert> dialogTyp, ObservableValue<String> titel) {
T element, ObservableValue<String> titel,
Supplier<? extends Alert> dialogKonstruktor) {
ansicht.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
if (event.getClickCount() == 2 && !event.isConsumed()) {
event.consume();
var alterStatus = projekt.getUeberwachungsStatus();
projekt.setUeberwachungsStatus(UeberwachungsStatus.ZUSAMMENFASSEN);
Alert dialog;
try {
dialog = dialogTyp.getConstructor(element.getClass()).newInstance(element);
} catch (InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException
| NoSuchMethodException | SecurityException e) {
log.log(Level.SEVERE, e,
() -> "Dialog konnte nicht mit dem geforderten Konstruktor "
+ ">>public %s(%s)<< instanziiert werden!"
.formatted(dialogTyp.getSimpleName(),
element.getClass().getSimpleName()));
return;
}
Alert dialog = dialogKonstruktor.get();
dialog.initOwner(ansicht.getScene().getWindow());
dialog.titleProperty().bind(titel);
dialog.showAndWait().ifPresent(button -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
import io.github.aid_labor.classifier.basis.sprachverwaltung.Umlaute;
import io.github.aid_labor.classifier.uml.UMLProjekt;
import io.github.aid_labor.classifier.uml.klassendiagramm.KlassifiziererTyp;
import io.github.aid_labor.classifier.uml.klassendiagramm.UMLDiagrammElement;
import io.github.aid_labor.classifier.uml.klassendiagramm.UMLKlassifizierer;
import io.github.aid_labor.classifier.uml.klassendiagramm.UMLKommentar;
import javafx.application.Platform;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.beans.property.ReadOnlyObjectWrapper;
Expand Down Expand Up @@ -295,6 +298,18 @@ public void legeKommentarAn() {
this.kontroller.legeKommentarAn();
}

public void fuegeEin(Iterable<UMLDiagrammElement> elemente) {
for (var element : elemente) {
if (element instanceof UMLKlassifizierer klassifizierer) {
this.kontroller.legeNeuenKlassifiziererAn(klassifizierer);
} else if (element instanceof UMLKommentar kommentar) {
this.kontroller.legeKommentarAn(kommentar);
} else {
log.severe(() -> "unbekanntes UMLDiagrammelement: " + element);
}
}
}

// protected ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##

// package ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

package io.github.aid_labor.classifier.gui;

import java.util.function.Supplier;
import java.util.logging.Logger;

import io.github.aid_labor.classifier.basis.projekt.UeberwachungsStatus;
Expand Down Expand Up @@ -75,37 +76,51 @@ class ProjekteKontrolle {

void legeNeuenKlassifiziererAn(KlassifiziererTyp typ) {
var projekt = this.ansicht.getAngezeigtesProjektProperty().get();
var klassifizierer = new UMLKlassifizierer(typ, projekt.getProgrammiersprache(), "");
legeNeuenKlassifiziererAn(
new UMLKlassifizierer(typ, projekt.getProgrammiersprache(), ""));
}

void legeNeuenKlassifiziererAn(UMLKlassifizierer klassifizierer) {
var projekt = this.ansicht.getAngezeigtesProjektProperty().get();

var dialog = new UMLKlassifiziererBearbeitenDialog(klassifizierer);
dialog.titleProperty().bind(
projekt.nameProperty().concat(" > ")
.concat(new When(klassifizierer.nameProperty().isEmpty())
.then(sprache.getText("unbenannt", "Unbenannt"))
.otherwise(klassifizierer.nameProperty())));
legeDiagrammElementAn(klassifizierer, dialog);
legeDiagrammElementAn(klassifizierer, () -> {
var dialog = new UMLKlassifiziererBearbeitenDialog(klassifizierer, projekt);
dialog.titleProperty().bind(
projekt.nameProperty().concat(" > ")
.concat(new When(klassifizierer.nameProperty().isEmpty())
.then(sprache.getText("unbenannt", "Unbenannt"))
.otherwise(klassifizierer.nameProperty())));
return dialog;
});
}

void legeKommentarAn() {
legeKommentarAn(new UMLKommentar());
}

void legeKommentarAn(UMLKommentar kommentar) {
var projekt = this.ansicht.getAngezeigtesProjektProperty().get();
var kommentar = new UMLKommentar();

var dialog = new UMLKommentarBearbeitenDialog(kommentar);
dialog.titleProperty().bind(projekt.nameProperty().concat(" > ")
.concat(sprache.getTextProperty("kommentarBearbeitenTitel",
"Kommentar bearbeiten")));
legeDiagrammElementAn(kommentar, dialog);
legeDiagrammElementAn(kommentar, () -> {
var dialog = new UMLKommentarBearbeitenDialog(kommentar);
dialog.titleProperty().bind(projekt.nameProperty().concat(" > ")
.concat(sprache.getTextProperty("kommentarBearbeitenTitel",
"Kommentar bearbeiten")));
return dialog;
});
}

// private ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##

private void legeDiagrammElementAn(UMLDiagrammElement element, Alert dialog) {
private void legeDiagrammElementAn(UMLDiagrammElement element,
Supplier<Alert> dialogKonstruktor) {
var projekt = this.ansicht.getAngezeigtesProjektProperty().get();
var alterStatus = projekt.getUeberwachungsStatus();
projekt.setUeberwachungsStatus(UeberwachungsStatus.ZUSAMMENFASSEN);

projekt.getDiagrammElemente().add(element);

var dialog = dialogKonstruktor.get();
dialog.initOwner(this.ansicht.getAnsicht().getScene().getWindow());
dialog.showAndWait().ifPresent(button -> {
switch (button.getButtonData()) {
Expand Down
Loading

0 comments on commit 66f523f

Please sign in to comment.