diff --git a/pom.xml b/pom.xml index 6bcf008..a258536 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,19 @@ oop.lernquiz.App + + jar-with-dependencies + + + + jar-with-dependencies + package + + single + + + maven-install-plugin diff --git a/src/main/java/oop/lernquiz/controller/FrageErstellenController.java b/src/main/java/oop/lernquiz/controller/FrageErstellenController.java index 9f52121..9c69a70 100644 --- a/src/main/java/oop/lernquiz/controller/FrageErstellenController.java +++ b/src/main/java/oop/lernquiz/controller/FrageErstellenController.java @@ -1,21 +1,56 @@ package oop.lernquiz.controller; +import oop.lernquiz.model.Antwort; +import oop.lernquiz.model.Frage; +import oop.lernquiz.model.Schwierigkeit; import oop.lernquiz.navigator.Navigator; +import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties; +import oop.lernquiz.store.ThemaStore; import oop.lernquiz.view.FrageErstellenView; import oop.lernquiz.view.IView; +import java.util.ArrayList; + public class FrageErstellenController extends Controller { + private ThemaBearbeitungsProperties props; + + private FrageErstellenController(ThemaBearbeitungsProperties props) { + this.props = props; + } + + public void weitereErstellen(String[] fragenDaten) { + this.frageErstellen(fragenDaten); + Navigator.navigateTo("frage-erstellen", this.props); + } - public void weitereErstellen() { - Navigator.navigateTo("frage-erstellen"); + public void erstellen(String[] fragenDaten) { + this.frageErstellen(fragenDaten); + Navigator.navigateTo("thema-bearbeiten", this.props); } - public void erstellen() { - Navigator.navigateTo("thema-bearbeiten"); + private void frageErstellen(String[] fragenDaten) { + var antworten = new ArrayList(); + for (int i = 2; i < fragenDaten.length; i++) { + antworten.add(new Antwort(fragenDaten[i], i == 2)); + } + + Schwierigkeit schwierigkeit = Schwierigkeit.ALLE; + for (Schwierigkeit s : Schwierigkeit.values()) { + if (s.name().equals(fragenDaten[1])) { + schwierigkeit = s; + } + } + if(schwierigkeit == Schwierigkeit.ALLE) { + throw new IllegalArgumentException("Schwierigkeit kann nicht ALLE sein"); + } + + var frage = new Frage(fragenDaten[0], antworten, schwierigkeit); + + ThemaStore.getInstance().addFrage(this.props.getThema(), frage); } public void abbrechen() { - Navigator.navigateTo("thema-bearbeiten"); + Navigator.navigateTo("thema-bearbeiten", this.props); } @Override diff --git a/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java b/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java index e7faef0..53124aa 100644 --- a/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java +++ b/src/main/java/oop/lernquiz/controller/LernkarteErstellenController.java @@ -1,17 +1,31 @@ package oop.lernquiz.controller; +import oop.lernquiz.model.Lernkarte; import oop.lernquiz.navigator.Navigator; +import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties; +import oop.lernquiz.store.ThemaStore; import oop.lernquiz.view.IView; import oop.lernquiz.view.LernkarteErstellenView; public class LernkarteErstellenController extends Controller { + private ThemaBearbeitungsProperties props; - public void erstellen() { - Navigator.goBack(); + private LernkarteErstellenController(ThemaBearbeitungsProperties props) { + this.props = props; + } + + public void erstellen(String name, String inhalt) { + var lernkarte = new Lernkarte(name, inhalt); + + System.out.println("Lernkarte: " + name); + + ThemaStore.getInstance().addLernkarte(this.props.getThema(), lernkarte); + + Navigator.navigateTo("thema-bearbeiten", this.props); } public void abbrechen() { - Navigator.goBack(); + Navigator.navigateTo("thema-bearbeiten", this.props); } @Override diff --git a/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java b/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java index fa60b9e..02054b8 100644 --- a/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java +++ b/src/main/java/oop/lernquiz/controller/ThemaBearbeitenController.java @@ -1,17 +1,23 @@ package oop.lernquiz.controller; import oop.lernquiz.navigator.Navigator; +import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties; import oop.lernquiz.view.IView; import oop.lernquiz.view.ThemaBearbeitenView; public class ThemaBearbeitenController extends Controller { + private final ThemaBearbeitungsProperties props; + + private ThemaBearbeitenController(ThemaBearbeitungsProperties props) { + this.props = props; + } public void frageHinzufuegen() { - Navigator.navigateTo("frage-erstellen"); + Navigator.navigateTo("frage-erstellen", this.props); } public void lernkarteHinzufuegen() { - Navigator.navigateTo("lernkarte-erstellen"); + Navigator.navigateTo("lernkarte-erstellen", this.props); } public void abbrechen() { @@ -22,6 +28,13 @@ public void speichern() { Navigator.navigateTo("themen"); } + @Override + public void setView(ThemaBearbeitenView view) { + super.setView(view); + + this.view.setFragen(this.props.getThema().getFragen()); + } + @Override public void setView(IView view) { } diff --git a/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java b/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java index a9ebf7b..7048ec6 100644 --- a/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java +++ b/src/main/java/oop/lernquiz/controller/ThemaErstellenController.java @@ -1,6 +1,7 @@ package oop.lernquiz.controller; import oop.lernquiz.navigator.Navigator; +import oop.lernquiz.store.ThemaStore; import oop.lernquiz.view.IView; import oop.lernquiz.view.ThemaErstellenView; @@ -11,6 +12,9 @@ public void abbrechen() { } public void erstellen(String name) { + if(!ThemaStore.getInstance().addThema(name)) { + } + Navigator.goBack(); } diff --git a/src/main/java/oop/lernquiz/controller/ThemenController.java b/src/main/java/oop/lernquiz/controller/ThemenController.java index e9f5b9f..6e940c3 100644 --- a/src/main/java/oop/lernquiz/controller/ThemenController.java +++ b/src/main/java/oop/lernquiz/controller/ThemenController.java @@ -2,6 +2,7 @@ import oop.lernquiz.model.Thema; import oop.lernquiz.navigator.Navigator; +import oop.lernquiz.navigator.props.ThemaBearbeitungsProperties; import oop.lernquiz.store.ThemaStore; import oop.lernquiz.view.IView; import oop.lernquiz.view.ThemenView; @@ -10,7 +11,7 @@ public class ThemenController extends Controller { private ThemenController() {} public void themaBearbeiten(Thema thema) { - Navigator.navigateTo("thema-bearbeiten"); + Navigator.navigateTo("thema-bearbeiten", new ThemaBearbeitungsProperties(thema)); } public void themaErstellen() { diff --git a/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java b/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java index 914c7a2..3a5a147 100644 --- a/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java +++ b/src/main/java/oop/lernquiz/navigator/GeneralViewControllerFactory.java @@ -33,7 +33,7 @@ public ViewController createViewController(NavigatorProperties properties) { controllerConstructor.setAccessible(true); controller = controllerConstructor.newInstance(); } else { - var controllerConstructor = controllerClass.getDeclaredConstructor(NavigatorProperties.class); + var controllerConstructor = controllerClass.getDeclaredConstructor(properties.getClass()); controllerConstructor.setAccessible(true); controller = controllerConstructor.newInstance(properties); } diff --git a/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java b/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java new file mode 100644 index 0000000..9bc3f3c --- /dev/null +++ b/src/main/java/oop/lernquiz/navigator/props/ThemaBearbeitungsProperties.java @@ -0,0 +1,15 @@ +package oop.lernquiz.navigator.props; + +import oop.lernquiz.model.Thema; + +public class ThemaBearbeitungsProperties implements NavigatorProperties { + private Thema thema; + + public ThemaBearbeitungsProperties(Thema thema) { + this.thema = thema; + } + + public Thema getThema() { + return thema; + } +} diff --git a/src/main/java/oop/lernquiz/store/ThemaStore.java b/src/main/java/oop/lernquiz/store/ThemaStore.java index 54ec461..eb22202 100644 --- a/src/main/java/oop/lernquiz/store/ThemaStore.java +++ b/src/main/java/oop/lernquiz/store/ThemaStore.java @@ -122,6 +122,31 @@ public List getThemen() { return themaList; } + /** + * fügt ein Thema hinzu, wenn kein Thema mit dem Namen existiert + * + * @return true wenn das thema erstellt wurde + */ + public boolean addThema(String name) { + for (Thema thema : themaList) { + if (thema.getName().equals(name)) { + return false; + } + } + + themaList.add(new Thema(name, "")); + + return true; + } + + public void addFrage(Thema thema, Frage frage) { + thema.getFragen().add(frage); + } + + public void addLernkarte(Thema thema, Lernkarte lernkarte) { + thema.getLernkarten().add(lernkarte); + } + public static ThemaStore getInstance() { if (instance == null) { instance = new ThemaStore(); diff --git a/src/main/java/oop/lernquiz/view/FrageErstellenView.java b/src/main/java/oop/lernquiz/view/FrageErstellenView.java index 95a94bc..406000f 100644 --- a/src/main/java/oop/lernquiz/view/FrageErstellenView.java +++ b/src/main/java/oop/lernquiz/view/FrageErstellenView.java @@ -2,11 +2,9 @@ import oop.lernquiz.controller.FrageErstellenController; import oop.lernquiz.controller.IController; +import oop.lernquiz.model.Schwierigkeit; import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.*; public class FrageErstellenView extends View { private Label frageLabel; @@ -17,6 +15,8 @@ public class FrageErstellenView extends View { private Label richtigeAntwortLabel; private Label[] falscheAntwortLabel; + private Combo schwierigkeit; + protected FrageErstellenView(Composite composite) { super(composite); } @@ -62,20 +62,44 @@ protected void buildUI() { y += 35; } + var lbl = new Label(composite, SWT.NONE); + lbl.setText("Schwierigkeit"); + lbl.setLocation(25, y); + lbl.pack(); + + this.schwierigkeit = new Combo(this.composite, SWT.DROP_DOWN | SWT.BORDER); + this.schwierigkeit.setLocation(150, y); + for (int i = 1; i < Schwierigkeit.values().length; i++) { + this.schwierigkeit.add(Schwierigkeit.values()[i].name()); + } + this.schwierigkeit.select(0); + this.schwierigkeit.pack(); + var abbrechen = new Button(composite, 0); abbrechen.setText("Abbrechen"); abbrechen.setBounds(400, 400, 100, 40); - abbrechen.addListener(SWT.Selection, ev -> controller.erstellen()); + abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen()); var erstellen = new Button(composite, 0); erstellen.setText("Erstellen"); erstellen.setBounds(520, 400, 100, 40); - erstellen.addListener(SWT.Selection, ev -> controller.erstellen()); + erstellen.addListener(SWT.Selection, ev -> controller.erstellen(this.fragenDaten())); var weitereErstellen = new Button(composite, 0); weitereErstellen.setText("Weitere Erstellen"); weitereErstellen.setBounds(640, 400, 140, 40); - weitereErstellen.addListener(SWT.Selection, ev -> controller.weitereErstellen()); + weitereErstellen.addListener(SWT.Selection, ev -> controller.weitereErstellen(this.fragenDaten())); + } + + private String[] fragenDaten() { + return new String[]{ + frageText.getText(), + schwierigkeit.getText(), + richtigeAntwort.getText(), + falscheAntwort[0].getText(), + falscheAntwort[1].getText(), + falscheAntwort[2].getText() + }; } @Override diff --git a/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java b/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java index 5c0edab..9115449 100644 --- a/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java +++ b/src/main/java/oop/lernquiz/view/LernkarteErstellenView.java @@ -39,16 +39,12 @@ protected void buildUI() { var abbrechen = new Button(composite, 0); abbrechen.setText("Abbrechen"); abbrechen.setBounds(540, 400, 100, 40); - abbrechen.addListener(SWT.Selection, ev -> { - controller.erstellen(); - }); + abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen()); var erstellen = new Button(composite, 0); erstellen.setText("Erstellen"); erstellen.setBounds(680, 400, 100, 40); - erstellen.addListener(SWT.Selection, ev -> { - controller.abbrechen(); - }); + erstellen.addListener(SWT.Selection, ev -> controller.erstellen(name.getText(), inhalt.getText())); } @Override diff --git a/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java b/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java index 5110c62..0040733 100644 --- a/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java +++ b/src/main/java/oop/lernquiz/view/ThemaBearbeitenView.java @@ -2,46 +2,97 @@ import oop.lernquiz.controller.IController; import oop.lernquiz.controller.ThemaBearbeitenController; +import oop.lernquiz.model.Frage; import oop.lernquiz.util.ElementCenter; import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowData; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.*; + +import java.util.List; public class ThemaBearbeitenView extends View { + private ScrolledComposite scroll; + private Composite fragenListe; + protected ThemaBearbeitenView(Composite composite) { super(composite); } @Override protected void buildUI() { - var lbl = new Label(composite, SWT.NONE); - lbl.setText("Thema Bearbeiten"); - ElementCenter.centerElementOnX(lbl, 20); + { + this.composite.setLayout(new GridLayout(2, false)); + + var first = new Composite(this.composite, SWT.NONE); + first.setLayout(new GridLayout(1, false)); + var data = new GridData(SWT.FILL, SWT.FILL, false, true); + data.widthHint = 500; + data.heightHint = this.composite.getSize().y; + first.setLayoutData(data); + + scroll = new ScrolledComposite(first, SWT.V_SCROLL); + scroll.setLayout(new GridLayout(1, false)); + scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + fragenListe = new Composite(scroll, SWT.NONE); + fragenListe.setLayout(new GridLayout(2, false)); + fragenListe.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + } + var controls = new Composite(this.composite, SWT.NONE); + controls.setLayout(new GridLayout(1, false)); + var data = new GridData(SWT.FILL, SWT.FILL, false, true); + controls.setLayoutData(data); - var frageErstellen = new Button(composite, 0); + var frageErstellen = new Button(controls, 0); frageErstellen .setText("Frage Erstellen"); frageErstellen .setBounds(640, 120, 140, 40); frageErstellen .addListener(SWT.Selection, ev -> { controller.frageHinzufuegen(); }); - var lernkarteErstellen = new Button(composite, 0); + var lernkarteErstellen = new Button(controls, 0); lernkarteErstellen.setText("Lernkarte Erstellen"); lernkarteErstellen.setBounds(640, 200, 140, 40); lernkarteErstellen.addListener(SWT.Selection, ev -> controller.lernkarteHinzufuegen()); - var abbrechen = new Button(composite, 0); + var abbrechen = new Button(controls, 0); abbrechen.setText("Abbrechen"); abbrechen.setBounds(500, 380, 100, 40); abbrechen.addListener(SWT.Selection, ev -> controller.abbrechen()); - var speichern = new Button(composite, 0); + var speichern = new Button(controls, 0); speichern.setText("Speichern"); speichern.setBounds(640, 380, 100, 40); speichern.addListener(SWT.Selection, ev -> controller.speichern()); } + public void setFragen(List fragen) { + var textData = new GridData(SWT.FILL, SWT.FILL, true, false); + textData.widthHint = 200; + + var editData = new GridData(SWT.FILL, SWT.FILL, false, false); + + editData.widthHint = 200; + for (var frage : fragen) { + var lbl = new Text(fragenListe, SWT.WRAP | SWT.READ_ONLY); + lbl.setText(frage.getFrage()); + lbl.setLayoutData(textData); + + var bearbeiten = new Button(fragenListe, 0); + bearbeiten.setText("Bearbeiten"); + bearbeiten.setLayoutData(editData); + } + + scroll.setContent(fragenListe); + scroll.setExpandHorizontal(true); + scroll.setExpandVertical(true); + scroll.setMinSize(fragenListe.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + } + @Override public void setController(IController controller) { diff --git a/src/main/java/oop/lernquiz/view/ThemenView.java b/src/main/java/oop/lernquiz/view/ThemenView.java index 4bff442..533ed53 100644 --- a/src/main/java/oop/lernquiz/view/ThemenView.java +++ b/src/main/java/oop/lernquiz/view/ThemenView.java @@ -43,14 +43,14 @@ protected void buildUI() { var erstellen = new Button(composite, 0); erstellen.setText("Thema Erstellen"); - erstellen.setBounds(680, 200, 100, 40); + erstellen.setBounds(660, 200, 120, 40); erstellen.addListener(SWT.Selection, ev -> { controller.themaErstellen(); }); var schliessen = new Button(composite, 0); schliessen.setText("Zurück"); - schliessen.setBounds(680, 400, 100, 40); + schliessen.setBounds(660, 400, 120, 40); schliessen.addListener(SWT.Selection, ev -> { controller.zurueck(); });