From becc6cde59668ff27ae2c6965220fe6bcd193b43 Mon Sep 17 00:00:00 2001 From: Johann Maierhofer <126261667+JohannMaierhofer@users.noreply.github.com> Date: Sat, 2 Nov 2024 09:15:29 +0100 Subject: [PATCH] Feature Eigenschaften Bearbeiten Teil 2 (#399) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Erweiterung Eigenschaftenfilter * Solve comments * fix Long compare * Update MitgliedQuery.java * Zwischenstand * Weitere Icons * Kommentare und Renaming * Delete old files * Umbennenung * Include Comments * TextInput bei Zusatzfeldern auch disable * Tooltips für Eigenschaftenauswahl und Zusatzfelderabfrage * Großschrift --- .../JVerein/Queries/MitgliedQuery.java | 6 +- .../MitgliedEigenschaftZuordnungAction.java | 110 +++++-- .../JVerein/gui/control/FilterControl.java | 189 +++++------ .../JVerein/gui/control/MitgliedControl.java | 76 ++--- .../dialogs/EigenschaftenAuswahlDialog.java | 54 ++- .../dialogs/EigenschaftenAuswahlDialog2.java | 159 --------- .../EigenschaftenAuswahlParameter.java | 10 +- .../EigenschaftenAuswahlParameter2.java | 53 --- .../dialogs/MailEmpfaengerAuswahlDialog.java | 4 +- .../JVerein/gui/menu/MitgliedMenu.java | 18 +- .../JVerein/gui/util/EigenschaftenUtil.java | 102 ------ .../gui/view/AuswertungMitgliedView.java | 9 +- .../gui/view/AuswertungNichtMitgliedView.java | 9 +- .../JVerein/gui/view/FreieFormulareView.java | 11 +- .../JVerein/gui/view/MitgliederSucheView.java | 9 +- .../gui/view/NichtMitgliederSucheView.java | 9 +- .../JVerein/server/EigenschaftenNode.java | 260 ++++++++++++--- .../JVerein/server/EigenschaftenNode2.java | 307 ------------------ src/img/150/maxeins.png | Bin 0 -> 175 bytes src/img/150/pflicht-maxeins.png | Bin 0 -> 226 bytes src/img/150/pflicht.png | Bin 0 -> 198 bytes src/img/150/tree-checked-partly.png | Bin 0 -> 208 bytes src/img/150/tree-checked.png | Bin 0 -> 253 bytes src/img/200/maxeins.png | Bin 0 -> 188 bytes src/img/200/pflicht-maxeins.png | Bin 0 -> 229 bytes src/img/200/pflicht.png | Bin 0 -> 213 bytes src/img/200/tree-checked-partly.png | Bin 0 -> 230 bytes src/img/200/tree-checked.png | Bin 0 -> 244 bytes src/img/300/maxeins.png | Bin 0 -> 219 bytes src/img/300/pflicht-maxeins.png | Bin 0 -> 264 bytes src/img/300/pflicht.png | Bin 0 -> 242 bytes src/img/300/tree-checked-partly.png | Bin 0 -> 255 bytes src/img/300/tree-checked.png | Bin 0 -> 276 bytes src/img/maxeins.png | Bin 0 -> 158 bytes src/img/pflicht-maxeins.png | Bin 0 -> 198 bytes src/img/pflicht.png | Bin 0 -> 186 bytes src/img/tree-checked-partly.png | Bin 0 -> 191 bytes src/img/tree-checked.png | Bin 0 -> 223 bytes 38 files changed, 507 insertions(+), 888 deletions(-) delete mode 100644 src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog2.java delete mode 100644 src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter2.java delete mode 100644 src/de/jost_net/JVerein/gui/util/EigenschaftenUtil.java delete mode 100644 src/de/jost_net/JVerein/server/EigenschaftenNode2.java create mode 100644 src/img/150/maxeins.png create mode 100644 src/img/150/pflicht-maxeins.png create mode 100644 src/img/150/pflicht.png create mode 100644 src/img/150/tree-checked-partly.png create mode 100644 src/img/150/tree-checked.png create mode 100644 src/img/200/maxeins.png create mode 100644 src/img/200/pflicht-maxeins.png create mode 100644 src/img/200/pflicht.png create mode 100644 src/img/200/tree-checked-partly.png create mode 100644 src/img/200/tree-checked.png create mode 100644 src/img/300/maxeins.png create mode 100644 src/img/300/pflicht-maxeins.png create mode 100644 src/img/300/pflicht.png create mode 100644 src/img/300/tree-checked-partly.png create mode 100644 src/img/300/tree-checked.png create mode 100644 src/img/maxeins.png create mode 100644 src/img/pflicht-maxeins.png create mode 100644 src/img/pflicht.png create mode 100644 src/img/tree-checked-partly.png create mode 100644 src/img/tree-checked.png diff --git a/src/de/jost_net/JVerein/Queries/MitgliedQuery.java b/src/de/jost_net/JVerein/Queries/MitgliedQuery.java index 4e0c67c7c..7edf1cf95 100644 --- a/src/de/jost_net/JVerein/Queries/MitgliedQuery.java +++ b/src/de/jost_net/JVerein/Queries/MitgliedQuery.java @@ -34,7 +34,7 @@ import de.jost_net.JVerein.keys.Datentyp; import de.jost_net.JVerein.rmi.Beitragsgruppe; import de.jost_net.JVerein.rmi.Mitglied; -import de.jost_net.JVerein.server.EigenschaftenNode2; +import de.jost_net.JVerein.server.EigenschaftenNode; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; import de.willuhn.datasource.pseudo.PseudoIterator; import de.willuhn.datasource.rmi.DBIterator; @@ -462,7 +462,7 @@ public Object extract(ResultSet rs) throws RemoteException, SQLException if (control.getEigenschaftenVerknuepfung().equals("und")) { ok = true; - if(suchauswahl.get(suchId).equals(EigenschaftenNode2.PLUS)) + if(suchauswahl.get(suchId).equals(EigenschaftenNode.PLUS)) { if (!mitgliedeigenschaftenIds.contains(suchId)) { @@ -481,7 +481,7 @@ public Object extract(ResultSet rs) throws RemoteException, SQLException } else // Oder { - if(suchauswahl.get(suchId).equals(EigenschaftenNode2.PLUS)) + if(suchauswahl.get(suchId).equals(EigenschaftenNode.PLUS)) { if (mitgliedeigenschaftenIds.contains(suchId)) { diff --git a/src/de/jost_net/JVerein/gui/action/MitgliedEigenschaftZuordnungAction.java b/src/de/jost_net/JVerein/gui/action/MitgliedEigenschaftZuordnungAction.java index abd94e70d..6901136f1 100644 --- a/src/de/jost_net/JVerein/gui/action/MitgliedEigenschaftZuordnungAction.java +++ b/src/de/jost_net/JVerein/gui/action/MitgliedEigenschaftZuordnungAction.java @@ -17,7 +17,11 @@ package de.jost_net.JVerein.gui.action; import java.rmi.RemoteException; +import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.control.MitgliedControl; @@ -26,8 +30,11 @@ import de.jost_net.JVerein.rmi.Eigenschaften; import de.jost_net.JVerein.rmi.Mitglied; import de.jost_net.JVerein.server.EigenschaftenNode; +import de.willuhn.datasource.rmi.DBService; +import de.willuhn.datasource.rmi.ResultSetExtractor; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.system.OperationCanceledException; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; @@ -45,59 +52,114 @@ public void handleAction(Object context) throws ApplicationException { throw new ApplicationException("Kein Mitglied ausgewählt"); } - Mitglied[] m = null; + Mitglied[] mitglieder = null; if (context instanceof Mitglied) { - m = new Mitglied[] { (Mitglied) context }; + mitglieder = new Mitglied[] { (Mitglied) context }; } else if (context instanceof Mitglied[]) { - m = (Mitglied[]) context; + mitglieder = (Mitglied[]) context; } int anzErfolgreich = 0; int anzBereitsVorhanden = 0; + int anzGeloescht = 0; try { EigenschaftenAuswahlDialog ead = new EigenschaftenAuswahlDialog("", true, - false, new MitgliedControl(null)); + false, new MitgliedControl(null), false, mitglieder); EigenschaftenAuswahlParameter param = ead.open(); - for (EigenschaftenNode en : param.getEigenschaften()) + if (param == null || param.getEigenschaftenNodes() == null) { - for (Mitglied mit : m) + return; + } + Map eigenschaftenMap = getEigenschaften(); + ArrayList eigenschaftenNodes = param.getEigenschaftenNodes(); + for (EigenschaftenNode eigenschaftenNode : eigenschaftenNodes) + { + if (eigenschaftenNode.getPreset().equals(EigenschaftenNode.PLUS)) { - Eigenschaften eig = (Eigenschaften) Einstellungen.getDBService() - .createObject(Eigenschaften.class, null); - eig.setEigenschaft(en.getEigenschaft().getID()); - eig.setMitglied(mit.getID()); - try + for (Mitglied mitglied : mitglieder) { - eig.store(); - anzErfolgreich++; - } - catch (RemoteException e) - { - if (e.getCause() instanceof SQLException) + Eigenschaften eig = (Eigenschaften) Einstellungen.getDBService() + .createObject(Eigenschaften.class, null); + eig.setEigenschaft(eigenschaftenNode.getEigenschaft().getID()); + eig.setMitglied(mitglied.getID()); + try + { + eig.store(); + anzErfolgreich++; + } + catch (RemoteException e) { - anzBereitsVorhanden++; + if (e.getCause() instanceof SQLException) + { + anzBereitsVorhanden++; + } + else + { + throw new ApplicationException(e); + } } - else + } + } + else if (eigenschaftenNode.getPreset().equals(EigenschaftenNode.MINUS)) + { + for (Mitglied mitglied : mitglieder) + { + for (Long key : eigenschaftenMap.keySet()) { - throw new ApplicationException(e); + Long[] entry = eigenschaftenMap.get(key); + if (entry[0].equals(Long.valueOf(mitglied.getID())) && + entry[1].equals(Long.valueOf(eigenschaftenNode.getEigenschaft().getID()))) + { + Eigenschaften eig = (Eigenschaften) Einstellungen.getDBService() + .createObject(Eigenschaften.class, key.toString()); + eig.delete(); + anzGeloescht++; + } } } } } } + catch (OperationCanceledException oce) + { + throw oce; + } catch (Exception e) { Logger.error( - - "Fehler beim Anlegen neuer Eigenschaften", e); + "Fehler beim Bearbeiten von Eigenschaften", e); return; } GUI.getStatusBar().setSuccessText( String.format( - "%d Eigenschaft(en) angelegt. %d waren bereits vorhanden.", - anzErfolgreich, anzBereitsVorhanden)); + "%d Eigenschaft(en) angelegt, %d waren bereits vorhanden, %d wurden gelöscht.", + anzErfolgreich, anzBereitsVorhanden, anzGeloescht)); + } + + @SuppressWarnings("unchecked") + private Map getEigenschaften() throws RemoteException + { + // Eigenschaften lesen + final DBService service = Einstellungen.getDBService(); + String sql = "SELECT eigenschaften.* from eigenschaften "; + Map mitgliedeigenschaften = (Map) service.execute(sql, + new Object[] { }, new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws RemoteException, SQLException + { + Map list = new HashMap<>(); + while (rs.next()) + { + // (Eigenschaften.Id, [Mitglied.Id, Eigenschaft.Id]) + list.put(rs.getLong(1), new Long[] {rs.getLong(2), rs.getLong(3)}); + } + return list; + } + }); + return mitgliedeigenschaften; } } diff --git a/src/de/jost_net/JVerein/gui/control/FilterControl.java b/src/de/jost_net/JVerein/gui/control/FilterControl.java index 78ac2a853..a2a76727a 100644 --- a/src/de/jost_net/JVerein/gui/control/FilterControl.java +++ b/src/de/jost_net/JVerein/gui/control/FilterControl.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; -import java.util.List; import java.util.StringTokenizer; import org.eclipse.swt.SWT; @@ -31,8 +30,8 @@ import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.control.MitgliedskontoControl.DIFFERENZ; -import de.jost_net.JVerein.gui.dialogs.EigenschaftenAuswahlDialog2; -import de.jost_net.JVerein.gui.dialogs.EigenschaftenAuswahlParameter2; +import de.jost_net.JVerein.gui.dialogs.EigenschaftenAuswahlDialog; +import de.jost_net.JVerein.gui.dialogs.EigenschaftenAuswahlParameter; import de.jost_net.JVerein.gui.dialogs.ZusatzfelderAuswahlDialog; import de.jost_net.JVerein.gui.input.GeschlechtInput; import de.jost_net.JVerein.gui.input.IntegerNullInput; @@ -42,8 +41,8 @@ import de.jost_net.JVerein.rmi.Beitragsgruppe; import de.jost_net.JVerein.rmi.Eigenschaft; import de.jost_net.JVerein.rmi.Lehrgangsart; +import de.jost_net.JVerein.rmi.Mitglied; import de.jost_net.JVerein.server.EigenschaftenNode; -import de.jost_net.JVerein.server.EigenschaftenNode2; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; import de.willuhn.datasource.GenericObjectNode; import de.willuhn.datasource.pseudo.PseudoIterator; @@ -351,9 +350,9 @@ public boolean isSuchExterneMitgliedsnummerActive() public DialogInput getEigenschaftenAuswahl() throws RemoteException { String tmp = settings.getString(settingsprefix + "eigenschaften", ""); - final EigenschaftenAuswahlDialog2 d = new EigenschaftenAuswahlDialog2(tmp, - false, true, this); - d.addCloseListener(new EigenschaftenCloseListener2()); + final EigenschaftenAuswahlDialog d = new EigenschaftenAuswahlDialog(tmp, + false, true, this, false); + d.addCloseListener(new EigenschaftenCloseListener()); StringTokenizer stt = new StringTokenizer(tmp, ","); StringBuilder text = new StringBuilder(); @@ -367,7 +366,7 @@ public DialogInput getEigenschaftenAuswahl() throws RemoteException { String s = stt.nextToken(); String prefix = "+"; - if (s.substring(s.length()-1).equals(EigenschaftenNode2.MINUS)) + if (s.substring(s.length()-1).equals(EigenschaftenNode.MINUS)) prefix = "-"; Eigenschaft ei = (Eigenschaft) Einstellungen.getDBService() .createObject(Eigenschaft.class, s.substring(0,s.length()-1)); @@ -380,6 +379,7 @@ public DialogInput getEigenschaftenAuswahl() throws RemoteException } eigenschaftenabfrage = new DialogInput(text.toString(), d); eigenschaftenabfrage.setName("Eigenschaften"); + eigenschaftenabfrage.disableClientControl(); eigenschaftenabfrage.addListener(new Listener() { @@ -398,14 +398,20 @@ public boolean isEigenschaftenAuswahlAktiv() return eigenschaftenabfrage != null; } + public void updateEigenschaftenAuswahlTooltip() + { + eigenschaftenabfrage.getControl().setToolTipText( + eigenschaftenabfrage.getText()); + } + public TreePart getEigenschaftenAuswahlTree(String vorbelegung, - boolean ohnePflicht) throws RemoteException + boolean ohnePflicht, boolean onlyChecked, + Mitglied[] mitglieder) throws RemoteException { eigenschaftenAuswahlTree = new TreePart( - new EigenschaftenNode(vorbelegung, ohnePflicht), null); - eigenschaftenAuswahlTree.setCheckable(true); + new EigenschaftenNode(vorbelegung, ohnePflicht, onlyChecked, mitglieder), null); eigenschaftenAuswahlTree.addSelectionListener( - new EigenschaftListener(eigenschaftenAuswahlTree)); + new EigenschaftListener()); eigenschaftenAuswahlTree.setFormatter(new EigenschaftTreeFormatter()); return eigenschaftenAuswahlTree; } @@ -417,62 +423,53 @@ public static class EigenschaftTreeFormatter implements TreeFormatter public void format(TreeItem item) { EigenschaftenNode eigenschaftitem = (EigenschaftenNode) item.getData(); - if (eigenschaftitem.getNodeType() == EigenschaftenNode.ROOT - || eigenschaftitem - .getNodeType() == EigenschaftenNode.EIGENSCHAFTGRUPPE) + if (eigenschaftitem.getNodeType() == EigenschaftenNode.ROOT) { - // + item.setImage(SWTUtil.getImage("document-properties.png")); } - else + else if (eigenschaftitem + .getNodeType() == EigenschaftenNode.EIGENSCHAFTGRUPPE) { - if (eigenschaftitem.getEigenschaften() != null - || eigenschaftitem.isPreset()) + try { - item.setChecked(true); + boolean pflicht = eigenschaftitem.getEigenschaftGruppe().getPflicht(); + boolean maxeins = eigenschaftitem.getEigenschaftGruppe().getMax1(); + if (pflicht && maxeins) + { + item.setImage(SWTUtil.getImage("pflicht-maxeins.png")); + } + if (pflicht && !maxeins) + { + item.setImage(SWTUtil.getImage("pflicht.png")); + } + if (!pflicht && maxeins) + { + item.setImage(SWTUtil.getImage("maxeins.png")); + } } - else + catch (RemoteException e) { - item.setChecked(false); + ; } } - } - } - - public TreePart getEigenschaftenAuswahlTree2(String vorbelegung, - boolean ohnePflicht) throws RemoteException - { - eigenschaftenAuswahlTree = new TreePart( - new EigenschaftenNode2(vorbelegung, ohnePflicht), null); - eigenschaftenAuswahlTree.addSelectionListener( - new EigenschaftListener2()); - eigenschaftenAuswahlTree.setFormatter(new EigenschaftTreeFormatter2()); - return eigenschaftenAuswahlTree; - } - - public static class EigenschaftTreeFormatter2 implements TreeFormatter - { - - @Override - public void format(TreeItem item) - { - EigenschaftenNode2 eigenschaftitem = (EigenschaftenNode2) item.getData(); - if (eigenschaftitem.getNodeType() == EigenschaftenNode2.ROOT - || eigenschaftitem - .getNodeType() == EigenschaftenNode2.EIGENSCHAFTGRUPPE) - { - // - } else { - if (eigenschaftitem.getEigenschaften() != null - || eigenschaftitem.getPreset().equals(EigenschaftenNode2.PLUS)) + if (eigenschaftitem.getPreset().equals(EigenschaftenNode.PLUS)) { item.setImage(SWTUtil.getImage("list-add.png")); } - else if (eigenschaftitem.getPreset().equals(EigenschaftenNode2.MINUS)) + else if (eigenschaftitem.getPreset().equals(EigenschaftenNode.MINUS)) { item.setImage(SWTUtil.getImage("list-remove.png")); } + else if (eigenschaftitem.getPreset().equals(EigenschaftenNode.CHECKED)) + { + item.setImage(SWTUtil.getImage("tree-checked.png")); + } + else if (eigenschaftitem.getPreset().equals(EigenschaftenNode.CHECKED_PARTLY)) + { + item.setImage(SWTUtil.getImage("tree-checked-partly.png")); + } else { item.setImage(SWTUtil.getImage("tree-empty.png")); @@ -760,6 +757,7 @@ public DialogInput getZusatzfelderAuswahl() zusatzfelderabfrage = new DialogInput("", zad); setZusatzfelderAuswahl(); zusatzfelderabfrage.setName("Zusatzfelder"); + zusatzfelderabfrage.disableClientControl(); return zusatzfelderabfrage; } @@ -768,22 +766,28 @@ public boolean isZusatzfelderAuswahlAktiv() return zusatzfelderabfrage != null; } + public void updateZusatzfelderAuswahlTooltip() + { + zusatzfelderabfrage.getControl().setToolTipText(zusatzfelderabfrage.getText()); + } + public void setZusatzfelderAuswahl() { int selected = settings.getInt(additionalparamprefix2 + "selected", 0); + String string = ""; if (selected == 0) { - zusatzfelderabfrage.setText("kein Feld ausgewählt"); + string = "Kein Feld ausgewählt"; } else if (selected == 1) { - zusatzfelderabfrage.setText("1 Feld ausgewählt"); + string = "1 Feld ausgewählt"; } else { - zusatzfelderabfrage - .setText(String.format("%d Felder ausgewählt", selected)); + string = String.format("%d Felder ausgewählt", selected); } + zusatzfelderabfrage.setText(string); } public SelectInput getMailauswahl() throws RemoteException @@ -1195,6 +1199,7 @@ private class ZusatzfelderListener implements Listener public void handleEvent(Event event) { setZusatzfelderAuswahl(); + zusatzfelderabfrage.getControl().setToolTipText(zusatzfelderabfrage.getText()); refresh(); } } @@ -1218,56 +1223,6 @@ public void handleEvent(Event event) } static class EigenschaftListener implements Listener - { - - private TreePart tree; - - public EigenschaftListener(TreePart tree) - { - this.tree = tree; - } - - @Override - public void handleEvent(Event event) - { - // "o" ist das Objekt, welches gerade markiert - // wurde oder die Checkbox geaendert wurde. - GenericObjectNode o = (GenericObjectNode) event.data; - - // Da der Listener sowohl dann aufgerufen wird,j - // nur nur eine Zeile selektiert wurde als auch, - // wenn die Checkbox geaendert wurde, musst du jetzt - // noch ersteres ausfiltern - die Checkboxen sollen - // ja nicht geaendert werden, wenn nur eine Zeile - // selektiert aber die Checkbox nicht geaendert wurde. - // Hierzu schreibe ich in event.detail einen Int-Wert. - // event.detail = -1 // Nur selektiert - // event.detail = 1 // Checkbox aktiviert - // event.detail = 0 // Checkbox deaktiviert - - // Folgende Abfrage deaktiviert wegen Problemen mit Windows - // if (event.detail == -1) - // { - // return; - // } - try - { - if (o.getChildren() == null) - { - return; - } - List children = PseudoIterator.asList(o.getChildren()); - boolean b = event.detail > 0; - tree.setChecked(children.toArray(new Object[children.size()]), b); - } - catch (RemoteException e) - { - Logger.error("Fehler", e); - } - } - } - - static class EigenschaftListener2 implements Listener { @Override @@ -1276,14 +1231,14 @@ public void handleEvent(Event event) // "o" ist das Objekt, welches gerade markiert wurde GenericObjectNode o = (GenericObjectNode) event.data; - if (o instanceof EigenschaftenNode2) + if (o instanceof EigenschaftenNode) { - EigenschaftenNode2 node = (EigenschaftenNode2) o; - if ( node.getNodeType() == EigenschaftenNode2.EIGENSCHAFTEN) + EigenschaftenNode node = (EigenschaftenNode) o; + if ( node.getNodeType() == EigenschaftenNode.EIGENSCHAFTEN) { node.incPreset(); TreeItem item = (TreeItem) event.item; - new EigenschaftTreeFormatter2().format(item); + new EigenschaftTreeFormatter().format(item); } } } @@ -1292,7 +1247,7 @@ public void handleEvent(Event event) /** * Listener, der die Auswahl der Eigenschaften ueberwacht. */ - private class EigenschaftenCloseListener2 implements Listener + private class EigenschaftenCloseListener implements Listener { @Override @@ -1302,22 +1257,22 @@ public void handleEvent(Event event) { return; } - EigenschaftenAuswahlParameter2 param = (EigenschaftenAuswahlParameter2) event.data; + EigenschaftenAuswahlParameter param = (EigenschaftenAuswahlParameter) event.data; StringBuilder id = new StringBuilder(); StringBuilder text = new StringBuilder(); - for (Object o : param.getEigenschaften()) + for (Object o : param.getEigenschaftenNodes()) { if (text.length() > 0) { id.append(","); text.append(", "); } - EigenschaftenNode2 node = (EigenschaftenNode2) o; + EigenschaftenNode node = (EigenschaftenNode) o; try { id.append(node.getEigenschaft().getID() + node.getPreset()); String prefix = "+"; - if (node.getPreset().equals(EigenschaftenNode2.MINUS)) + if (node.getPreset().equals(EigenschaftenNode.MINUS)) prefix = "-"; text.append(prefix + node.getEigenschaft().getBezeichnung()); } @@ -1326,7 +1281,9 @@ public void handleEvent(Event event) Logger.error("Fehler", e); } } - eigenschaftenabfrage.setText(text.toString()); + String string = text.toString(); + eigenschaftenabfrage.setText(string); + eigenschaftenabfrage.getControl().setToolTipText(string); settings.setAttribute(settingsprefix + "eigenschaften", id.toString()); settings.setAttribute(settingsprefix + "eigenschaften.verknuepfung", param.getVerknuepfung()); diff --git a/src/de/jost_net/JVerein/gui/control/MitgliedControl.java b/src/de/jost_net/JVerein/gui/control/MitgliedControl.java index e4af5c677..73e08eb9a 100644 --- a/src/de/jost_net/JVerein/gui/control/MitgliedControl.java +++ b/src/de/jost_net/JVerein/gui/control/MitgliedControl.java @@ -2188,9 +2188,8 @@ public TreePart getEigenschaftenTree() throws RemoteException return eigenschaftenTree; } eigenschaftenTree = new TreePart(new EigenschaftenNode(mitglied), null); - eigenschaftenTree.setCheckable(true); eigenschaftenTree - .addSelectionListener(new EigenschaftListener(eigenschaftenTree)); + .addSelectionListener(new EigenschaftListener()); eigenschaftenTree.setFormatter(new EigenschaftTreeFormatter()); return eigenschaftenTree; } @@ -2203,6 +2202,9 @@ public void handleStore() if (eigenschaftenTree != null) { + ArrayList rootNodes = (ArrayList) eigenschaftenTree.getItems(); // liefert nur den Root + EigenschaftenNode root = (EigenschaftenNode) rootNodes.get(0); + HashMap pflichtgruppen = new HashMap<>(); DBIterator it = Einstellungen.getDBService() .createList(EigenschaftGruppe.class); @@ -2212,18 +2214,12 @@ public void handleStore() EigenschaftGruppe eg = it.next(); pflichtgruppen.put(eg.getID(), Boolean.valueOf(false)); } - for (Object o1 : eigenschaftenTree.getItems()) + + for (EigenschaftenNode checkedNode : root.getCheckedNodes()) { - if (o1 instanceof EigenschaftenNode) - { - EigenschaftenNode node = (EigenschaftenNode) o1; - if (node.getNodeType() == EigenschaftenNode.EIGENSCHAFTEN) - { - Eigenschaft ei = (Eigenschaft) node.getObject(); - pflichtgruppen.put(ei.getEigenschaftGruppeId() + "", - Boolean.valueOf(true)); - } - } + Eigenschaft ei = (Eigenschaft) checkedNode.getObject(); + pflichtgruppen.put(ei.getEigenschaftGruppeId() + "", + Boolean.valueOf(true)); } for (String key : pflichtgruppen.keySet()) { @@ -2245,29 +2241,22 @@ public void handleStore() EigenschaftGruppe eg = it.next(); max1gruppen.put(eg.getID(), Boolean.valueOf(false)); } - for (Object o1 : eigenschaftenTree.getItems()) + for (EigenschaftenNode checkedNode : root.getCheckedNodes()) { - if (o1 instanceof EigenschaftenNode) + Eigenschaft ei = (Eigenschaft) checkedNode.getObject(); + Boolean m1 = max1gruppen.get(ei.getEigenschaftGruppe().getID()); + if (m1 != null) { - EigenschaftenNode node = (EigenschaftenNode) o1; - if (node.getNodeType() == EigenschaftenNode.EIGENSCHAFTEN) + if (m1) { - Eigenschaft ei = (Eigenschaft) node.getObject(); - Boolean m1 = max1gruppen.get(ei.getEigenschaftGruppe().getID()); - if (m1 != null) - { - if (m1) - { - throw new ApplicationException(String.format( - "In der Eigenschaftengruppe '%s' mehr als ein Eintrag markiert!", - ei.getEigenschaftGruppe().getBezeichnung())); - } - else - { - max1gruppen.put(ei.getEigenschaftGruppe().getID(), - Boolean.valueOf(true)); - } - } + throw new ApplicationException(String.format( + "In der Eigenschaftengruppe '%s' mehr als ein Eintrag markiert!", + ei.getEigenschaftGruppe().getBezeichnung())); + } + else + { + max1gruppen.put(ei.getEigenschaftGruppe().getID(), + Boolean.valueOf(true)); } } } @@ -2430,6 +2419,8 @@ public void handleStore() } if (eigenschaftenTree != null) { + ArrayList rootNodes = (ArrayList) eigenschaftenTree.getItems(); // liefert nur den Root + EigenschaftenNode root = (EigenschaftenNode) rootNodes.get(0); if (!getMitglied().isNewObject()) { DBIterator it = Einstellungen.getDBService() @@ -2441,20 +2432,13 @@ public void handleStore() ei.delete(); } } - for (Object o1 : eigenschaftenTree.getItems()) + for (EigenschaftenNode checkedNode : root.getCheckedNodes()) { - if (o1 instanceof EigenschaftenNode) - { - EigenschaftenNode node = (EigenschaftenNode) o1; - if (node.getNodeType() == EigenschaftenNode.EIGENSCHAFTEN) - { - Eigenschaften eig = (Eigenschaften) Einstellungen.getDBService() - .createObject(Eigenschaften.class, null); - eig.setEigenschaft(node.getEigenschaft().getID()); - eig.setMitglied(getMitglied().getID()); - eig.store(); - } - } + Eigenschaften eig = (Eigenschaften) Einstellungen.getDBService() + .createObject(Eigenschaften.class, null); + eig.setEigenschaft(checkedNode.getEigenschaft().getID()); + eig.setMitglied(getMitglied().getID()); + eig.store(); } } diff --git a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog.java b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog.java index 46ee2a973..9a1b96e2a 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog.java @@ -22,6 +22,7 @@ import org.eclipse.swt.widgets.Composite; import de.jost_net.JVerein.gui.control.FilterControl; +import de.jost_net.JVerein.rmi.Mitglied; import de.jost_net.JVerein.server.EigenschaftenNode; import de.willuhn.jameica.gui.Action; import de.willuhn.jameica.gui.dialogs.AbstractDialog; @@ -29,6 +30,7 @@ import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.parts.TreePart; import de.willuhn.jameica.gui.util.LabelGroup; +import de.willuhn.jameica.system.OperationCanceledException; import de.willuhn.logging.Logger; /** @@ -47,6 +49,10 @@ public class EigenschaftenAuswahlDialog private boolean ohnePflicht; private boolean verknuepfung; + + private boolean onlyChecked; + + private Mitglied[] mitglieder; private EigenschaftenAuswahlParameter param; @@ -55,9 +61,28 @@ public class EigenschaftenAuswahlDialog * * @param defaults * Liste der Eigenschaften-IDs durch Komma separiert. + * @param ohnePflicht + * Spezifiziert ob Eigenschaftengruppen mit Pflicht und Max1 + * ignoriert werden. true: ignorieren + * @param verknuepfung + * Spezifiziert ob der Input Verknüpfung (UND,ODER) im Dialog + * angezeigt werden soll. + * @param control + * Control welches den EigenschaftenAuswahlTree liefert. + * @param onlyChecked + * Gibt an ob nur die Checkbox Werte UNCHECKED und CHECKED + * angezeigt werden. + * @param mitglieder + * Liste der Mitglieder welche selektiert wurden. */ public EigenschaftenAuswahlDialog(String defaults, boolean ohnePflicht, - boolean verknuepfung, FilterControl control) + boolean verknuepfung, FilterControl control, boolean onlyChecked) + { + this(defaults, ohnePflicht, verknuepfung, control, onlyChecked, null); + } + + public EigenschaftenAuswahlDialog(String defaults, boolean ohnePflicht, + boolean verknuepfung, FilterControl control, boolean onlyChecked, Mitglied[] mitglieder) { super(EigenschaftenAuswahlDialog.POSITION_CENTER); this.setSize(400, 400); @@ -66,12 +91,15 @@ public EigenschaftenAuswahlDialog(String defaults, boolean ohnePflicht, setTitle("Eigenschaften auswählen "); this.control = control; this.setDefaults(defaults); + this.onlyChecked = onlyChecked; + this.mitglieder = mitglieder; } /** * Speichert die Default-Werte. * * @param defaults + * Liste der Eigenschaften-IDs durch Komma separiert. */ public void setDefaults(String defaults) { @@ -82,7 +110,7 @@ public void setDefaults(String defaults) protected void paint(Composite parent) throws RemoteException { final TreePart tree = control.getEigenschaftenAuswahlTree(this.defaults, - ohnePflicht); + ohnePflicht, onlyChecked, mitglieder); LabelGroup group = new LabelGroup(parent, "Eigenschaften", true); group.addPart(tree); @@ -99,19 +127,16 @@ public void handleAction(Object context) try { param = new EigenschaftenAuswahlParameter(); - ArrayList checkednodes = (ArrayList) tree.getItems(); - for (Object o : checkednodes) + ArrayList rootNodes = (ArrayList) tree.getItems(); // liefert nur den Root + EigenschaftenNode root = (EigenschaftenNode) rootNodes.get(0); + for (EigenschaftenNode checkedNode : root.getCheckedNodes()) { - EigenschaftenNode checkedNode = (EigenschaftenNode) o; - if (checkedNode.getNodeType() == EigenschaftenNode.EIGENSCHAFTEN) - { - param.add(checkedNode); - } + param.add(checkedNode); } if (verknuepfung) { param - .setVerknuepfung((String) eigenschaftenverknuepfung.getValue()); + .setVerknuepfung((String) eigenschaftenverknuepfung.getValue()); } } catch (RemoteException e) @@ -121,6 +146,15 @@ public void handleAction(Object context) close(); } }, null, true, "ok.png"); + buttons.addButton("Abbrechen", new Action() + { + + @Override + public void handleAction(Object context) + { + throw new OperationCanceledException(); + } + }, null, false, "process-stop.png"); buttons.paint(parent); } diff --git a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog2.java b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog2.java deleted file mode 100644 index bd7d0c17b..000000000 --- a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlDialog2.java +++ /dev/null @@ -1,159 +0,0 @@ -/********************************************************************** - * Copyright (c) by Heiner Jostkleigrewe - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, - * see . - * - * heiner@jverein.de - * www.jverein.de - **********************************************************************/ -package de.jost_net.JVerein.gui.dialogs; - -import java.rmi.RemoteException; -import java.util.ArrayList; - -import org.eclipse.swt.widgets.Composite; - -import de.jost_net.JVerein.gui.control.FilterControl; -import de.jost_net.JVerein.server.EigenschaftenNode2; -import de.willuhn.datasource.GenericIterator; -import de.willuhn.jameica.gui.Action; -import de.willuhn.jameica.gui.dialogs.AbstractDialog; -import de.willuhn.jameica.gui.input.SelectInput; -import de.willuhn.jameica.gui.parts.ButtonArea; -import de.willuhn.jameica.gui.parts.TreePart; -import de.willuhn.jameica.gui.util.LabelGroup; -import de.willuhn.logging.Logger; - -/** - * Dialog, zur Auswahl von Eigenschaften eines Mitglied. - */ -public class EigenschaftenAuswahlDialog2 - extends AbstractDialog -{ - - private FilterControl control; - - private SelectInput eigenschaftenverknuepfung; - - private String defaults = null; - - private boolean ohnePflicht; - - private boolean verknuepfung; - - private EigenschaftenAuswahlParameter2 param; - - /** - * Eigenschaften oder Eigenschaftengruppen auswählen - * - * @param defaults - * Liste der Eigenschaften-IDs durch Komma separiert. - */ - public EigenschaftenAuswahlDialog2(String defaults, boolean ohnePflicht, - boolean verknuepfung, FilterControl control) - { - super(EigenschaftenAuswahlDialog2.POSITION_CENTER); - this.setSize(400, 400); - this.ohnePflicht = ohnePflicht; - this.verknuepfung = verknuepfung; - setTitle("Eigenschaften auswählen "); - this.control = control; - this.setDefaults(defaults); - } - - /** - * Speichert die Default-Werte. - * - * @param defaults - */ - public void setDefaults(String defaults) - { - this.defaults = defaults != null ? defaults : ""; - } - - @Override - protected void paint(Composite parent) throws RemoteException - { - final TreePart tree = control.getEigenschaftenAuswahlTree2(this.defaults, - ohnePflicht); - - LabelGroup group = new LabelGroup(parent, "Eigenschaften", true); - group.addPart(tree); - if (verknuepfung) - { - group.addInput(getEigenschaftenVerknuepfung()); - } - ButtonArea buttons = new ButtonArea(); - buttons.addButton("OK", new Action() - { - @Override - @SuppressWarnings("rawtypes") - public void handleAction(Object context) - { - try - { - param = new EigenschaftenAuswahlParameter2(); - ArrayList checkednodes = (ArrayList) tree.getItems(); - EigenschaftenNode2 root = (EigenschaftenNode2) checkednodes.get(0); - GenericIterator rootit = root.getChildren(); - while (rootit.hasNext()) - { - EigenschaftenNode2 gruppe = (EigenschaftenNode2) rootit.next(); - GenericIterator groupit = gruppe.getChildren(); - while (groupit.hasNext()) - { - EigenschaftenNode2 eigenschaft = (EigenschaftenNode2) groupit.next(); - if (eigenschaft.getNodeType() == EigenschaftenNode2.EIGENSCHAFTEN && - !eigenschaft.getPreset().equals(EigenschaftenNode2.UNCHECKED)) - { - param.add(eigenschaft); - } - } - } - if (verknuepfung) - { - param - .setVerknuepfung((String) eigenschaftenverknuepfung.getValue()); - } - } - catch (RemoteException e) - { - Logger.error("Fehler", e); - } - close(); - } - }, null, true, "ok.png"); - buttons.paint(parent); - } - - @Override - protected EigenschaftenAuswahlParameter2 getData() - { - return param; - } - - private SelectInput getEigenschaftenVerknuepfung() - { - if (eigenschaftenverknuepfung != null - && !eigenschaftenverknuepfung.getControl().isDisposed()) - { - return eigenschaftenverknuepfung; - } - ArrayList werte = new ArrayList<>(); - werte.add("und"); - werte.add("oder"); - eigenschaftenverknuepfung = new SelectInput(werte, - control.getEigenschaftenVerknuepfung()); - eigenschaftenverknuepfung.setName("Gruppen-Verknüpfung"); - return eigenschaftenverknuepfung; - } - -} diff --git a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter.java b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter.java index fac311041..120307125 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter.java +++ b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter.java @@ -22,23 +22,23 @@ public class EigenschaftenAuswahlParameter { - private ArrayList eigenschaften; + private ArrayList eigenschaftenNodes; private String verknuepfung; public EigenschaftenAuswahlParameter() { - eigenschaften = new ArrayList<>(); + eigenschaftenNodes = new ArrayList<>(); } public void add(EigenschaftenNode node) { - eigenschaften.add(node); + eigenschaftenNodes.add(node); } - public ArrayList getEigenschaften() + public ArrayList getEigenschaftenNodes() { - return eigenschaften; + return eigenschaftenNodes; } public void setVerknuepfung(String verknuepfung) diff --git a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter2.java b/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter2.java deleted file mode 100644 index 40908b072..000000000 --- a/src/de/jost_net/JVerein/gui/dialogs/EigenschaftenAuswahlParameter2.java +++ /dev/null @@ -1,53 +0,0 @@ -/********************************************************************** - * Copyright (c) by Heiner Jostkleigrewe - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, - * see . - * - * heiner@jverein.de - * www.jverein.de - **********************************************************************/ -package de.jost_net.JVerein.gui.dialogs; - -import java.util.ArrayList; - -import de.jost_net.JVerein.server.EigenschaftenNode2; - -public class EigenschaftenAuswahlParameter2 -{ - private ArrayList eigenschaften; - - private String verknuepfung; - - public EigenschaftenAuswahlParameter2() - { - eigenschaften = new ArrayList<>(); - } - - public void add(EigenschaftenNode2 node) - { - eigenschaften.add(node); - } - - public ArrayList getEigenschaften() - { - return eigenschaften; - } - - public void setVerknuepfung(String verknuepfung) - { - this.verknuepfung = verknuepfung; - } - - public String getVerknuepfung() - { - return verknuepfung; - } -} diff --git a/src/de/jost_net/JVerein/gui/dialogs/MailEmpfaengerAuswahlDialog.java b/src/de/jost_net/JVerein/gui/dialogs/MailEmpfaengerAuswahlDialog.java index aaf53b2cc..5efcc5615 100644 --- a/src/de/jost_net/JVerein/gui/dialogs/MailEmpfaengerAuswahlDialog.java +++ b/src/de/jost_net/JVerein/gui/dialogs/MailEmpfaengerAuswahlDialog.java @@ -72,11 +72,11 @@ public void handleAction(Object context) throws ApplicationException try { EigenschaftenAuswahlDialog ead = new EigenschaftenAuswahlDialog(null, - false, false, new MitgliedControl(null)); + false, false, new MitgliedControl(null), true); EigenschaftenAuswahlParameter param = ead.open(); if (param == null) return; - for (EigenschaftenNode node : param.getEigenschaften()) + for (EigenschaftenNode node : param.getEigenschaftenNodes()) { DBIterator it = Einstellungen.getDBService() .createList(Eigenschaften.class); diff --git a/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java b/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java index 6d3dc3721..ca2d977a6 100644 --- a/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java +++ b/src/de/jost_net/JVerein/gui/menu/MitgliedMenu.java @@ -76,6 +76,15 @@ public MitgliedMenu(Action detailaction) throws RemoteException new MitgliedDuplizierenAction(), "edit-copy.png")); addItem(new CheckedContextMenuItem("In Zwischenablage kopieren", new MitgliedInZwischenablageKopierenAction(), "edit-copy.png")); + addItem(new CheckedContextMenuItem("Eigenschaften", + new MitgliedEigenschaftZuordnungAction(), "document-properties.png")); + addItem(new CheckedContextMenuItem("Zusatzbeträge zuweisen", + new MitgliedZusatzbetraegeZuordnungAction(), "coins.png")); + if (Einstellungen.getEinstellung().getArbeitseinsatz() && !(detailaction instanceof NichtMitgliedDetailAction)) + { + addItem(new CheckedContextMenuItem("Arbeitseinsätze zuweisen", + new MitgliedArbeitseinsatzZuordnungAction(), "screwdriver.png")); + } if (detailaction instanceof NichtMitgliedDetailAction) { addItem(new CheckedSingleContextMenuItem("Zu Mitglied umwandeln", new Action() @@ -188,15 +197,6 @@ public void handleAction(Object context) throws ApplicationException new MitgliedVCardDateiAction(), "address-card.png")); addItem(new CheckedSingleContextMenuItem("vCard QR-Code", new MitgliedVCardQRCodeAction(), "qr-code.png")); - addItem(new CheckedContextMenuItem("Eigenschaften", - new MitgliedEigenschaftZuordnungAction(), "document-properties.png")); - if (Einstellungen.getEinstellung().getArbeitseinsatz() && !(detailaction instanceof NichtMitgliedDetailAction)) - { - addItem(new CheckedContextMenuItem("Arbeitseinsätze zuweisen", - new MitgliedArbeitseinsatzZuordnungAction(), "screwdriver.png")); - } - addItem(new CheckedContextMenuItem("Zusatzbeträge zuweisen", - new MitgliedZusatzbetraegeZuordnungAction(), "coins.png")); addItem(new CheckedContextMenuItem("Kontoauszug", new KontoauszugAction(), "file-invoice.png")); addItem(new CheckedSingleContextMenuItem("Geldspendenbescheinigung", diff --git a/src/de/jost_net/JVerein/gui/util/EigenschaftenUtil.java b/src/de/jost_net/JVerein/gui/util/EigenschaftenUtil.java deleted file mode 100644 index 2b8c57b6f..000000000 --- a/src/de/jost_net/JVerein/gui/util/EigenschaftenUtil.java +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************** - * Copyright (c) by Heiner Jostkleigrewe - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, - * see . - * - * heiner@jverein.de - * www.jverein.de - **********************************************************************/ -package de.jost_net.JVerein.gui.util; - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.StringTokenizer; - -import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.rmi.Eigenschaft; -import de.jost_net.JVerein.rmi.EigenschaftGruppe; -import de.willuhn.datasource.rmi.ObjectNotFoundException; -import de.willuhn.logging.Logger; - -public class EigenschaftenUtil -{ - private HashMap gruppen; - - private ArrayList eigenschaftenList; - - private HashMap auswahl; - - public EigenschaftenUtil(String eigenschaften) throws RemoteException - { - gruppen = new HashMap<>(); - eigenschaftenList = new ArrayList<>(); - auswahl = new HashMap<>(); - if (eigenschaften == null || eigenschaften.length() == 0) - { - return; - } - - StringTokenizer st = new StringTokenizer(eigenschaften, ","); - while (st.hasMoreTokens()) - { - try - { - String s = st.nextToken(); - Eigenschaft ei = (Eigenschaft) Einstellungen.getDBService() - .createObject(Eigenschaft.class, s.substring(0,s.length()-1)); - EigenschaftGruppe eg = ei.getEigenschaftGruppe(); - gruppen.put(eg.getID(), eg); - eigenschaftenList.add(ei); - auswahl.put(ei.getID(), s.substring(s.length()-1)); - } - catch (ObjectNotFoundException e) - { - Logger.error("Eigenschaft wurde zwischenzeitlich gelöscht"); - } - } - - } - - public ArrayList getGruppen() throws RemoteException - { - ArrayList ret = new ArrayList<>(); - for (String key : gruppen.keySet()) - { - ret.add((EigenschaftGruppe) Einstellungen.getDBService() - .createObject(EigenschaftGruppe.class, key)); - } - return ret; - } - - public ArrayList get(EigenschaftGruppe eg) throws RemoteException - { - ArrayList ret = new ArrayList<>(); - for (Eigenschaft ei : eigenschaftenList) - { - if (ei.getEigenschaftGruppe().getID().equals(eg.getID())) - { - ret.add(ei); - } - } - return ret; - } - - public ArrayList getEigenschaften() - { - return eigenschaftenList; - } - - public String getAuswahl(String eigenschaftId) - { - return auswahl.get(eigenschaftId); - } -} diff --git a/src/de/jost_net/JVerein/gui/view/AuswertungMitgliedView.java b/src/de/jost_net/JVerein/gui/view/AuswertungMitgliedView.java index e626fed3f..60b479f43 100644 --- a/src/de/jost_net/JVerein/gui/view/AuswertungMitgliedView.java +++ b/src/de/jost_net/JVerein/gui/view/AuswertungMitgliedView.java @@ -23,6 +23,7 @@ import de.jost_net.JVerein.gui.control.MitgliedControl; import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.input.DialogInput; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.util.ColumnLayout; import de.willuhn.jameica.gui.util.LabelGroup; @@ -53,12 +54,16 @@ public void bind() throws Exception { left.addInput(control.getSuchExterneMitgliedsnummer()); } - left.addInput(control.getEigenschaftenAuswahl()); + DialogInput eigenschaftenInput = control.getEigenschaftenAuswahl(); + left.addInput(eigenschaftenInput); + control.updateEigenschaftenAuswahlTooltip(); left.addInput(control.getBeitragsgruppeAusw()); if (Einstellungen.getEinstellung().hasZusatzfelder()) { - left.addInput(control.getZusatzfelderAuswahl()); + DialogInput zusatzfelderInput = control.getZusatzfelderAuswahl(); + left.addInput(zusatzfelderInput); + control.updateZusatzfelderAuswahlTooltip(); } // middle diff --git a/src/de/jost_net/JVerein/gui/view/AuswertungNichtMitgliedView.java b/src/de/jost_net/JVerein/gui/view/AuswertungNichtMitgliedView.java index d08b88f57..35b7ee8c8 100644 --- a/src/de/jost_net/JVerein/gui/view/AuswertungNichtMitgliedView.java +++ b/src/de/jost_net/JVerein/gui/view/AuswertungNichtMitgliedView.java @@ -24,6 +24,7 @@ import de.jost_net.JVerein.gui.control.FilterControl.Mitgliedstyp; import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.input.DialogInput; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.util.ColumnLayout; import de.willuhn.jameica.gui.util.LabelGroup; @@ -50,10 +51,14 @@ public void bind() throws Exception left.addInput(control.getMailauswahl()); left.addInput(control.getSuchAdresstyp(Mitgliedstyp.NICHTMITGLIED)); - left.addInput(control.getEigenschaftenAuswahl()); + DialogInput eigenschaftenInput = control.getEigenschaftenAuswahl(); + left.addInput(eigenschaftenInput); + control.updateEigenschaftenAuswahlTooltip(); if (Einstellungen.getEinstellung().hasZusatzfelder()) { - left.addInput(control.getZusatzfelderAuswahl()); + DialogInput zusatzfelderInput = control.getZusatzfelderAuswahl(); + left.addInput(zusatzfelderInput); + control.updateZusatzfelderAuswahlTooltip(); } SimpleContainer right = new SimpleContainer(cl.getComposite()); diff --git a/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java b/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java index f292b6bcc..e8430c834 100644 --- a/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java +++ b/src/de/jost_net/JVerein/gui/view/FreieFormulareView.java @@ -8,6 +8,7 @@ import de.jost_net.JVerein.gui.control.FilterControl.Mitgliedstyp; import de.willuhn.jameica.gui.AbstractView; import de.willuhn.jameica.gui.GUI; +import de.willuhn.jameica.gui.input.DialogInput; import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.util.ColumnLayout; @@ -41,10 +42,16 @@ public void bind() throws Exception mid.addInput(control.getSuchGeschlecht()); SimpleContainer right = new SimpleContainer(cl.getComposite()); - right.addInput(control.getEigenschaftenAuswahl()); + DialogInput eigenschaftenInput = control.getEigenschaftenAuswahl(); + right.addInput(eigenschaftenInput); + control.updateEigenschaftenAuswahlTooltip(); right.addInput(control.getStichtag()); if (Einstellungen.getEinstellung().hasZusatzfelder()) - right.addInput(control.getZusatzfelderAuswahl()); + { + DialogInput zusatzfelderInput = control.getZusatzfelderAuswahl(); + right.addInput(zusatzfelderInput); + control.updateZusatzfelderAuswahlTooltip(); + } SimpleContainer cont = new SimpleContainer(getParent(), true); cont.addHeadline("Parameter"); diff --git a/src/de/jost_net/JVerein/gui/view/MitgliederSucheView.java b/src/de/jost_net/JVerein/gui/view/MitgliederSucheView.java index 32a6c8c0e..68a545496 100644 --- a/src/de/jost_net/JVerein/gui/view/MitgliederSucheView.java +++ b/src/de/jost_net/JVerein/gui/view/MitgliederSucheView.java @@ -22,6 +22,7 @@ import de.jost_net.JVerein.gui.action.DokumentationAction; import de.jost_net.JVerein.gui.action.MitgliedDetailAction; import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.input.DialogInput; import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.util.ColumnLayout; @@ -56,11 +57,15 @@ public void getFilter() throws RemoteException left.addInput(control.getSuchExterneMitgliedsnummer()); else left.addInput(control.getSuchMitgliedsnummer()); - left.addInput(control.getEigenschaftenAuswahl()); + DialogInput eigenschaftenInput = control.getEigenschaftenAuswahl(); + left.addInput(eigenschaftenInput); + control.updateEigenschaftenAuswahlTooltip(); left.addInput(control.getBeitragsgruppeAusw()); if (Einstellungen.getEinstellung().hasZusatzfelder()) { - left.addInput(control.getZusatzfelderAuswahl()); + DialogInput zusatzfelderInput = control.getZusatzfelderAuswahl(); + left.addInput(zusatzfelderInput); + control.updateZusatzfelderAuswahlTooltip(); } SimpleContainer middle = new SimpleContainer(cl.getComposite()); diff --git a/src/de/jost_net/JVerein/gui/view/NichtMitgliederSucheView.java b/src/de/jost_net/JVerein/gui/view/NichtMitgliederSucheView.java index 5db66e5c3..01cf95e36 100644 --- a/src/de/jost_net/JVerein/gui/view/NichtMitgliederSucheView.java +++ b/src/de/jost_net/JVerein/gui/view/NichtMitgliederSucheView.java @@ -22,6 +22,7 @@ import de.jost_net.JVerein.gui.action.NichtMitgliedDetailAction; import de.jost_net.JVerein.gui.action.DokumentationAction; import de.willuhn.jameica.gui.Action; +import de.willuhn.jameica.gui.input.DialogInput; import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.ButtonArea; import de.willuhn.jameica.gui.util.ColumnLayout; @@ -52,10 +53,14 @@ public void getFilter() throws RemoteException SimpleContainer left = new SimpleContainer(cl.getComposite()); left.addInput(control.getSuchname()); left.addInput(control.getSuchAdresstyp(Mitgliedstyp.NICHTMITGLIED)); - left.addInput(control.getEigenschaftenAuswahl()); + DialogInput eigenschaftenInput = control.getEigenschaftenAuswahl(); + left.addInput(eigenschaftenInput); + control.updateEigenschaftenAuswahlTooltip(); if (Einstellungen.getEinstellung().hasZusatzfelder()) { - left.addInput(control.getZusatzfelderAuswahl()); + DialogInput zusatzfelderInput = control.getZusatzfelderAuswahl(); + left.addInput(zusatzfelderInput); + control.updateZusatzfelderAuswahlTooltip(); } SimpleContainer right = new SimpleContainer(cl.getComposite()); diff --git a/src/de/jost_net/JVerein/server/EigenschaftenNode.java b/src/de/jost_net/JVerein/server/EigenschaftenNode.java index 8fb3fefee..12e80eab6 100644 --- a/src/de/jost_net/JVerein/server/EigenschaftenNode.java +++ b/src/de/jost_net/JVerein/server/EigenschaftenNode.java @@ -17,19 +17,25 @@ package de.jost_net.JVerein.server; import java.rmi.RemoteException; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.rmi.Eigenschaft; import de.jost_net.JVerein.rmi.EigenschaftGruppe; -import de.jost_net.JVerein.rmi.Eigenschaften; import de.jost_net.JVerein.rmi.Mitglied; import de.willuhn.datasource.GenericIterator; import de.willuhn.datasource.GenericObject; import de.willuhn.datasource.GenericObjectNode; import de.willuhn.datasource.pseudo.PseudoIterator; import de.willuhn.datasource.rmi.DBIterator; +import de.willuhn.datasource.rmi.DBService; +import de.willuhn.datasource.rmi.ResultSetExtractor; public class EigenschaftenNode implements GenericObjectNode { @@ -42,11 +48,11 @@ public class EigenschaftenNode implements GenericObjectNode private Eigenschaft eigenschaft = null; - private Eigenschaften eigenschaften = null; - private ArrayList childrens; - private boolean preset; + private String preset = UNCHECKED; // Gesetzter Status/Icon + + private String base = UNCHECKED; // Wert im Tree nach CHECKED bzw. MINUS public static final int NONE = 0; @@ -58,27 +64,104 @@ public class EigenschaftenNode implements GenericObjectNode private int nodetype = NONE; - private ArrayList eigenschaftids = new ArrayList<>(); + private Map config = new HashMap<>(); + + private boolean onlyChecked = false; // Nur CHECKED, kein PLUS, MINUS etc. + + public static final String UNCHECKED = "0"; + + public static final String PLUS = "1"; + + public static final String MINUS = "2"; + + public static final String CHECKED = "3"; + + public static final String CHECKED_PARTLY = "4"; public EigenschaftenNode(Mitglied mitglied) throws RemoteException { - this(mitglied, "", false); + this(mitglied, "", false, true, null); } - public EigenschaftenNode(String vorbelegung, boolean ohnePflicht) + public EigenschaftenNode(String vorbelegung, boolean ohnePflicht, + boolean onlyChecked, Mitglied[] mitglieder) throws RemoteException { - this(null, vorbelegung, ohnePflicht); + this(null, vorbelegung, ohnePflicht, onlyChecked, mitglieder); } private EigenschaftenNode(Mitglied mitglied, String vorbelegung, - boolean ohnePflicht) throws RemoteException + boolean ohnePflicht, boolean onlyChecked, Mitglied[] mitglieder) + throws RemoteException { - this.mitglied = mitglied; - StringTokenizer stt = new StringTokenizer(vorbelegung, ","); - while (stt.hasMoreElements()) + this.onlyChecked = onlyChecked; + if (!vorbelegung.isEmpty()) + { + // Aufruf aus (Nicht-)Mitglied Filter Dialog oder Auswertungen (Nicht-)Mitglied, + // Werte (PLUS oder MINUS) aus Settings lesen + StringTokenizer stt = new StringTokenizer(vorbelegung, ","); + while (stt.hasMoreElements()) + { + String s = stt.nextToken(); + config.put(s.substring(0,s.length()-1), // substring ist Eigenschaft.Id + // letztes Zeichen PLUS oder MINUS + new Config(s.substring(s.length()-1), EigenschaftenNode.UNCHECKED)); + } + } + else if (mitglied != null) { - eigenschaftids.add(stt.nextToken()); + // Aufruf aus (Nicht-)Mitglied Detail View Lasche Eigenschaften + // Gesetzte Eigenschaften (CHECKED) aus Datenbank lesen + this.mitglied = mitglied; + List eigenschaften = getEigenschaften(); // [Mitglied.Id, Eigenschaft.Id] + for (Long[] value: eigenschaften) + { + if (value[0].toString().equals(mitglied.getID())) + { + config.put(value[1].toString(), + new Config(EigenschaftenNode.CHECKED, EigenschaftenNode.UNCHECKED)); + } + } + } + else if (mitglieder != null) + { + // Aufruf aus Mitglied Kontext Menü -> Eigenschaften + // Gesetzte Eigenschaften (CHECKED) aus Datenbank lesen + Map counters = new HashMap<>(); // + Long counter = null; + List eigenschaften = getEigenschaften(); // [Mitglied.Id, Eigenschaft.Id] + for (Long[] value: eigenschaften) + { + counter = counters.get(value[1]); + for (Mitglied m : mitglieder) + { + if (value[0].toString().equals(m.getID())) + { + if (counter == null) + // Erster Eintrag für Eigenschaft gefunden + counters.put(value[1], 1l); + else + // Weiterer Eintrag für Eigenschaft gefunden, Anzahl inkrementieren + // Neuer Eintrag überschreibt alten Eintrag + counters.put(value[1], ++counter); + } + } + } + for (Long key : counters.keySet()) + { + if (counters.get(key) == mitglieder.length) + { + // Bei allen Mitgliedern ist die Eigenschaft gesetzt + config.put(key.toString(), + new Config(EigenschaftenNode.CHECKED, EigenschaftenNode.CHECKED)); + } + else if (counters.get(key) != 0) + { + // Bei mindesten einem Mitglied ist die Eigenschaft gesetzt + config.put(key.toString(), + new Config(EigenschaftenNode.CHECKED_PARTLY, EigenschaftenNode.CHECKED_PARTLY)); + } + } } childrens = new ArrayList<>(); nodetype = ROOT; @@ -86,6 +169,8 @@ private EigenschaftenNode(Mitglied mitglied, String vorbelegung, .createList(EigenschaftGruppe.class); if (ohnePflicht) { + // Pflicht und Maximal Eins wird im Mitglied Kontext Menü -> Eigenschaften + // zur Zeit noch nicht unterstützt it.addFilter( "(PFLICHT <> true OR PFLICHT IS NULL) AND (MAX1 <> true OR MAX1 IS NULL)"); } @@ -93,16 +178,16 @@ private EigenschaftenNode(Mitglied mitglied, String vorbelegung, while (it.hasNext()) { EigenschaftGruppe eg = (EigenschaftGruppe) it.next(); - childrens.add(new EigenschaftenNode(this, mitglied, eg, eigenschaftids)); + childrens.add(new EigenschaftenNode(this, onlyChecked, eg, config)); } } - private EigenschaftenNode(EigenschaftenNode parent, Mitglied mitglied, - EigenschaftGruppe eg, ArrayList eigenschaftsids) + private EigenschaftenNode(EigenschaftenNode parent, boolean onlyChecked, + EigenschaftGruppe eg, Map config) throws RemoteException { this.parent = parent; - this.mitglied = mitglied; + this.onlyChecked = onlyChecked; childrens = new ArrayList<>(); this.eigenschaftgruppe = eg; nodetype = EIGENSCHAFTGRUPPE; @@ -114,35 +199,24 @@ private EigenschaftenNode(EigenschaftenNode parent, Mitglied mitglied, while (it.hasNext()) { Eigenschaft eigenschaft = (Eigenschaft) it.next(); - Eigenschaften eigenschaften = null; - if (mitglied != null) - { - DBIterator it2 = Einstellungen.getDBService() - .createList(Eigenschaften.class); - it2.addFilter("mitglied = ? AND eigenschaft = ?", - new Object[] { mitglied.getID(), eigenschaft.getID() }); - if (it2.hasNext()) - { - eigenschaften = (Eigenschaften) it2.next(); - } - } - childrens.add(new EigenschaftenNode(this, mitglied, eigenschaft, - eigenschaften, eigenschaftsids)); + childrens.add(new EigenschaftenNode(this, onlyChecked, eigenschaft, + config)); } } - private EigenschaftenNode(EigenschaftenNode parent, Mitglied mitglied, - Eigenschaft eigenschaft, Eigenschaften eigenschaften, - ArrayList eigenschaftids) throws RemoteException + private EigenschaftenNode(EigenschaftenNode parent, boolean onlyChecked, + Eigenschaft eigenschaft, + Map config) throws RemoteException { this.parent = parent; nodetype = EIGENSCHAFTEN; - this.mitglied = mitglied; + this.onlyChecked = onlyChecked; this.eigenschaft = eigenschaft; - this.eigenschaften = eigenschaften; - if (eigenschaftids.contains(this.eigenschaft.getID())) + String eigenschaftenKey = this.eigenschaft.getID(); + if (config.containsKey(eigenschaftenKey)) { - preset = true; + preset = config.get(eigenschaftenKey).preset; + base = config.get(eigenschaftenKey).base; } } @@ -268,14 +342,116 @@ public Eigenschaft getEigenschaft() { return this.eigenschaft; } - - public Eigenschaften getEigenschaften() + + public EigenschaftGruppe getEigenschaftGruppe() { - return this.eigenschaften; + return this.eigenschaftgruppe; } - public boolean isPreset() + public String getPreset() { return preset; } + + public void incPreset() + { + if (!onlyChecked) + { + switch (preset) + { + // In Mitglied Kontext Menü -> Eigenschaften und + // im Filter Dialog gibt es PLUS und MINUS etc. + // Die ersten drei Eigenschaften sind in "base" gespeichert + case EigenschaftenNode.UNCHECKED: + case EigenschaftenNode.CHECKED: + case EigenschaftenNode.CHECKED_PARTLY: + preset = EigenschaftenNode.PLUS; + break; + case EigenschaftenNode.PLUS: + preset = EigenschaftenNode.MINUS; + break; + case EigenschaftenNode.MINUS: + preset = base; + break; + } + } + else + { + // In (Nicht-)Mitglied Detail View Lasche Eigenschaften und + // Mail Empfänger Auswahl Dialog -> Eigenschaften + // gibt es nur UNCHECKED und CHECKED + switch (preset) + { + case EigenschaftenNode.UNCHECKED: + preset = EigenschaftenNode.CHECKED; + break; + case EigenschaftenNode.CHECKED: + preset = EigenschaftenNode.UNCHECKED; + break; + } + } + } + + @SuppressWarnings("unchecked") + public List getEigenschaften() throws RemoteException + { + // Eigenschaften lesen + final DBService service = Einstellungen.getDBService(); + String sql = "SELECT eigenschaften.* from eigenschaften "; + List mitgliedeigenschaften = (List) service.execute(sql, + new Object[] { }, new ResultSetExtractor() + { + @Override + public Object extract(ResultSet rs) throws RemoteException, SQLException + { + List list = new ArrayList<>(); + while (rs.next()) + { + list.add(new Long[] {rs.getLong(2), rs.getLong(3)}); // Mitglied.Id, Eigenschaft.Id + } + return list; + } + }); + return mitgliedeigenschaften; + } + + @SuppressWarnings("rawtypes") + public ArrayList getCheckedNodes() + throws RemoteException + { + // Liefert alle EIGENSCHAFTEN Nodes die nicht UNCHECKED sind + // Momentan nur für ROOT gebraucht + ArrayList checkednodes = new ArrayList<>(); + if (this.nodetype == EigenschaftenNode.ROOT) + { + GenericIterator rootit = this.getChildren(); + while (rootit.hasNext()) + { + GenericObjectNode gruppe = (GenericObjectNode) rootit.next(); + GenericIterator groupit = gruppe.getChildren(); + while (groupit.hasNext()) + { + EigenschaftenNode eigenschaft = (EigenschaftenNode) groupit.next(); + if (!eigenschaft.getPreset().equals(EigenschaftenNode.UNCHECKED)) + { + checkednodes.add(eigenschaft); + } + } + } + } + return checkednodes; + } + + // Speichert den Startwert für eine Eigenschaft + private class Config + { + public String preset; + public String base; + + public Config(String preset, String base) + { + this.preset = preset; + this.base = base; + } + } } diff --git a/src/de/jost_net/JVerein/server/EigenschaftenNode2.java b/src/de/jost_net/JVerein/server/EigenschaftenNode2.java deleted file mode 100644 index 1ee8ea117..000000000 --- a/src/de/jost_net/JVerein/server/EigenschaftenNode2.java +++ /dev/null @@ -1,307 +0,0 @@ -/********************************************************************** - * Copyright (c) by Heiner Jostkleigrewe - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, - * see . - * - * heiner@jverein.de - * www.jverein.de - **********************************************************************/ -package de.jost_net.JVerein.server; - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.StringTokenizer; - -import de.jost_net.JVerein.Einstellungen; -import de.jost_net.JVerein.rmi.Eigenschaft; -import de.jost_net.JVerein.rmi.EigenschaftGruppe; -import de.jost_net.JVerein.rmi.Eigenschaften; -import de.jost_net.JVerein.rmi.Mitglied; -import de.willuhn.datasource.GenericIterator; -import de.willuhn.datasource.GenericObject; -import de.willuhn.datasource.GenericObjectNode; -import de.willuhn.datasource.pseudo.PseudoIterator; -import de.willuhn.datasource.rmi.DBIterator; - -public class EigenschaftenNode2 implements GenericObjectNode -{ - - private EigenschaftenNode2 parent = null; - - private Mitglied mitglied = null; - - private EigenschaftGruppe eigenschaftgruppe = null; - - private Eigenschaft eigenschaft = null; - - private Eigenschaften eigenschaften = null; - - private ArrayList childrens; - - private String preset = UNCHECKED; - - public static final int NONE = 0; - - public static final int ROOT = 1; - - public static final int EIGENSCHAFTGRUPPE = 2; - - public static final int EIGENSCHAFTEN = 3; - - private int nodetype = NONE; - - private Map eigenschaftids = new HashMap<>(); - - public static final String UNCHECKED = "0"; - - public static final String PLUS = "1"; - - public static final String MINUS = "2"; - - public EigenschaftenNode2(Mitglied mitglied) throws RemoteException - { - this(mitglied, "", false); - } - - public EigenschaftenNode2(String vorbelegung, boolean ohnePflicht) - throws RemoteException - { - this(null, vorbelegung, ohnePflicht); - } - - private EigenschaftenNode2(Mitglied mitglied, String vorbelegung, - boolean ohnePflicht) throws RemoteException - { - this.mitglied = mitglied; - StringTokenizer stt = new StringTokenizer(vorbelegung, ","); - while (stt.hasMoreElements()) - { - String s = stt.nextToken(); - eigenschaftids.put(s.substring(0,s.length()-1), s.substring(s.length()-1)); - } - childrens = new ArrayList<>(); - nodetype = ROOT; - DBIterator it = Einstellungen.getDBService() - .createList(EigenschaftGruppe.class); - if (ohnePflicht) - { - it.addFilter( - "(PFLICHT <> true OR PFLICHT IS NULL) AND (MAX1 <> true OR MAX1 IS NULL)"); - } - it.setOrder("order by bezeichnung"); - while (it.hasNext()) - { - EigenschaftGruppe eg = (EigenschaftGruppe) it.next(); - childrens.add(new EigenschaftenNode2(this, mitglied, eg, eigenschaftids)); - } - } - - private EigenschaftenNode2(EigenschaftenNode2 parent, Mitglied mitglied, - EigenschaftGruppe eg, Map eigenschaftsids) - throws RemoteException - { - this.parent = parent; - this.mitglied = mitglied; - childrens = new ArrayList<>(); - this.eigenschaftgruppe = eg; - nodetype = EIGENSCHAFTGRUPPE; - DBIterator it = Einstellungen.getDBService() - .createList(Eigenschaft.class); - it.addFilter("eigenschaftgruppe = ?", - new Object[] { eigenschaftgruppe.getID() }); - it.setOrder("order by bezeichnung"); - while (it.hasNext()) - { - Eigenschaft eigenschaft = (Eigenschaft) it.next(); - Eigenschaften eigenschaften = null; - if (mitglied != null) - { - DBIterator it2 = Einstellungen.getDBService() - .createList(Eigenschaften.class); - it2.addFilter("mitglied = ? AND eigenschaft = ?", - new Object[] { mitglied.getID(), eigenschaft.getID() }); - if (it2.hasNext()) - { - eigenschaften = (Eigenschaften) it2.next(); - } - } - childrens.add(new EigenschaftenNode2(this, mitglied, eigenschaft, - eigenschaften, eigenschaftsids)); - } - } - - private EigenschaftenNode2(EigenschaftenNode2 parent, Mitglied mitglied, - Eigenschaft eigenschaft, Eigenschaften eigenschaften, - Map eigenschaftids) throws RemoteException - { - this.parent = parent; - nodetype = EIGENSCHAFTEN; - this.mitglied = mitglied; - this.eigenschaft = eigenschaft; - this.eigenschaften = eigenschaften; - String eigenschaftenKey = this.eigenschaft.getID(); - if (eigenschaftids.containsKey(eigenschaftenKey)) - { - preset = eigenschaftids.get(eigenschaftenKey); - } - } - - @Override - @SuppressWarnings("rawtypes") - public GenericIterator getChildren() throws RemoteException - { - if (childrens == null) - { - return null; - } - return PseudoIterator - .fromArray(childrens.toArray(new GenericObject[childrens.size()])); - } - - public boolean removeChild(GenericObjectNode child) - { - return childrens.remove(child); - } - - @Override - public EigenschaftenNode2 getParent() - { - return parent; - } - - @Override - @SuppressWarnings("rawtypes") - public GenericIterator getPath() - { - return null; - } - - @Override - @SuppressWarnings("rawtypes") - public GenericIterator getPossibleParents() - { - return null; - } - - @Override - public boolean hasChild(GenericObjectNode object) - { - return childrens.size() > 0; - } - - @Override - public boolean equals(GenericObject other) - { - return false; - } - - @Override - public Object getAttribute(String name) throws RemoteException - { - switch (nodetype) - { - case ROOT: - { - return "Eigenschaften"; - } - case EIGENSCHAFTGRUPPE: - { - return eigenschaftgruppe.getBezeichnung(); - } - case EIGENSCHAFTEN: - { - return eigenschaft.getBezeichnung(); - } - } - return null; - } - - @Override - public String[] getAttributeNames() - { - return null; - } - - @Override - public String getID() - { - return null; - } - - @Override - public String getPrimaryAttribute() - { - return null; - } - - public Object getObject() - { - switch (nodetype) - { - case ROOT: - { - return mitglied; - } - case EIGENSCHAFTGRUPPE: - { - return eigenschaftgruppe; - } - case EIGENSCHAFTEN: - { - return eigenschaft; - } - } - return null; - } - - public int getNodeType() - { - return nodetype; - } - - public Mitglied getMitglied() - { - return this.mitglied; - } - - public Eigenschaft getEigenschaft() - { - return this.eigenschaft; - } - - public Eigenschaften getEigenschaften() - { - return this.eigenschaften; - } - - public String getPreset() - { - return preset; - } - - public void incPreset() - { - switch (preset) - { - case EigenschaftenNode2.UNCHECKED: - preset = EigenschaftenNode2.PLUS; - break; - case EigenschaftenNode2.PLUS: - preset = EigenschaftenNode2.MINUS; - break; - case EigenschaftenNode2.MINUS: - preset = EigenschaftenNode2.UNCHECKED; - break; - } - } -} diff --git a/src/img/150/maxeins.png b/src/img/150/maxeins.png new file mode 100644 index 0000000000000000000000000000000000000000..75f5d716a4057a108b631633348be09c42622d4a GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#X$M%Ak65bF}ngNnCR)^ z7~*j}IYEMzg+X~K+l(c8mdvSA#s&s+QWFvqER3y>v8bJQVRZ)yNtmZw9lUvBlFt^t zMSFVdQ&MBb@0P%56j{pDw literal 0 HcmV?d00001 diff --git a/src/img/150/pflicht.png b/src/img/150/pflicht.png new file mode 100644 index 0000000000000000000000000000000000000000..2b8014e1e85f60b830de388ba4d81a5f2ba97903 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#X$M%Ak65bF}ngNSmEj7 z7~*j}IYEMzg+bZqxJv0sNj5gNWTvWf^JdB>JFQ{W$*6h!%tw8XRMztM#%f2|eYWr^ ziNy%ba|_Zqxc%>)&HtZ7I26nC)N&UbW89f&S5XsST`PaC$4!)50tn8X=}VOHbzLkr oVNTaMCDG&Q?JfLnjE)Qpzh6o)%`12%4|D^Ar>mdKI;Vst07X7NQUCw| literal 0 HcmV?d00001 diff --git a/src/img/150/tree-checked-partly.png b/src/img/150/tree-checked-partly.png new file mode 100644 index 0000000000000000000000000000000000000000..e2fe9c0e338a6eb76b4fe0a08a4a1fa91eede79f GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#X$M%Ak65bF}ngN*yQQr z7~*j}IYEMzg+W<$mT%DXIf)4g25v%Drw<%BP>@#E!|Bt|>clQ(o^EAm00eXP|DTz7 zx9{??7hE&klnV=%DkTNAdcK!t~_v^-cBugnmb?)qZo(SV85UraIP zS`jYqP;BNrp?#&H4qw*t_txEWHoF_&dce-`uE_NMXKRLaK-VyMy85}Sb4q9e05UX4 A82|tP literal 0 HcmV?d00001 diff --git a/src/img/150/tree-checked.png b/src/img/150/tree-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..c79db2c1718b172cfaca8e7d41006a08949afe83 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#X$M%Ak65bF}ngNxZcyn zF~s9|a)Jaa3xl%iEZ?B%a}pC04BUjQP9HdMpdhWRhtsE_)rnooJl)FB00`#n|35SF zZr|l&FSur~r3%bkqWAMWQ00X=FOL-b`8hlsr{!S_(S_`yMJ>`=pM>TXxp@dIT&^LpV(z~F s6$=!%?XcrE6;UqdpQRwh%EHLdx;A*iU6uahK&LZ!y85}Sb4q9e0Q;|4LI3~& literal 0 HcmV?d00001 diff --git a/src/img/200/maxeins.png b/src/img/200/maxeins.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f88cf189397b6afc1ad87255026f165652e951 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVxatW5N34Jm|X!B%=2_{ z42d|LoFKufENgJ-RKnyds_6@Sk~M0lH8wUrJo83EIHlBwS(Zu1#N_r2pwL3g%bh@~ zabejnyX2fMHX9Zr(nz^GU4P#}AcRl*fUFVdQ&MBb@01=)%x&QzG literal 0 HcmV?d00001 diff --git a/src/img/200/pflicht-maxeins.png b/src/img/200/pflicht-maxeins.png new file mode 100644 index 0000000000000000000000000000000000000000..85bb4074c052801432aa9070f5ec7d292d94b146 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVxatW5N34Jm|X!BobKu3 z7!q+fIYEL|S=L|?_lzZamdvSA!kNb++1S|Hj5jCyaLi~9mA&lH&cH2Zm<$qp=A*ud zXT{uo{NWx8XEb}?UBJUA@*q>?Xoqjj@15!YS3YcD$XA@={~E3D~!s^^enoswOM;FyXi91_<^DUmm4F)gibZ# U?hBT)flg%bboFyt=akR{0Alh=m;e9( literal 0 HcmV?d00001 diff --git a/src/img/200/pflicht.png b/src/img/200/pflicht.png new file mode 100644 index 0000000000000000000000000000000000000000..704e383ea9a89d4db876dce5481a44aaf159a30f GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVxatW5N34Jm|X!BZ1;3= z42d|LoFKufENifcd&UwyOXgH5;ml)^Y;0_8#+#FUP82d+c4%kd7Bfr+2|e>sU&OOw z?!NOggxGmb2{TmO<_#{3ENR%E}!OZcDDQoGsh0;u0FMk&d73aAx z(9j4pOu~Kh!xhYKvIa?Bhc;*A?%jOYipA}q1_Q$zRtdhnv*vFGI*Gy4)z4*}Q$iB} Dlh{N; literal 0 HcmV?d00001 diff --git a/src/img/200/tree-checked-partly.png b/src/img/200/tree-checked-partly.png new file mode 100644 index 0000000000000000000000000000000000000000..a761f0fc8e7b065b60057f0714cbc2e79a5773bf GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVxatW5N34Jm|X!BoZ;!> z7!q+fIYEL|S=J!vw!`Ers_6@Sl1)}_<^h8AwBs`rxQ%#AI5u23;FHY8#@6=CM;%D9 zwSE3>Z)^YrYi<|bl9-*e>|%%o7h9~QLzbPHXY40=_f_c)tByxs<2hB-u%yOEQ$m;B z?cjra{s*U?w{`7FdHVZei~(0$-fD?3Z??)AQp(SpZoT}y;o79dI}=2BBpDbIMNOa1 Toc(n%(2We9u6{1-oD!MZ)^YrYi<|bl9-*eEO9cMPtf!~#~&86W!y35J0&1d%AmaT=Zrf$DUC literal 0 HcmV?d00001 diff --git a/src/img/300/maxeins.png b/src/img/300/maxeins.png new file mode 100644 index 0000000000000000000000000000000000000000..ab502bbe7d225483baeb4e55f220c62f9da97689 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVxatW5N34Jm|X!B?DceU z49U3n_QpouLk0qF504}%S2I0Zur#3~gvW8>G)tq#y+Q$rI~67da0z|c`zq(;r1|gk z&%Lu^_@Vk&OmE`3?{{>PgQu5IJRbb3#O%#p=H22JIZxzF&90x`n8&wW^It7Hhk$}Z z0|O&d+QPQy&Mht(cZCf*1Q?lEpyH3eluwx{|5C|`p+PlH;Td0Ofm5su&|wUou6{1- HoD!MIYEMTae_!sQzJ{y4i%rE>2n+(Nd+eykCb?P=8c4~&|9Sy(=%5bKQQ4t1Gk)I zMTl9t)x=!Kw_j?HsMxP56I@(w!pZwgrA4$t%F|FNX!GAYoBuC1G vxY@$3^Zca)vMIMsXSKK;)Brg(g_+?VgPQjJYra4)F)(<#`njxgN@xNAxjSM@ literal 0 HcmV?d00001 diff --git a/src/img/300/pflicht.png b/src/img/300/pflicht.png new file mode 100644 index 0000000000000000000000000000000000000000..a30b1cfd3e8b7a5ccb0c544979eeae8ff59a39ed GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVxatW5N34Jm|X!BT;l2C z7?N@C?ToX$4h9Tvp+1Q`J`d8`<79arrf{%_Tkj}sx+Zb$fs4x@m5%%0{c^Q3u{FmPk44py>Wk7#bP0l+XkK)>~A| literal 0 HcmV?d00001 diff --git a/src/img/300/tree-checked-partly.png b/src/img/300/tree-checked-partly.png new file mode 100644 index 0000000000000000000000000000000000000000..ad050be4bf6afef19ccf250a3f0dae2069cd58a7 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVxatW5N34Jm|X!B-011z z7?N=>IYEMTae_!sQzJ_cbLvLVSCfoAVv=P}ojW9vo_2gjLhu2TE6E8bsvA-n-nOaF ze&(aTA1+Y3Z=36ic{=*cz<4?G%!^ zy64z|jOYxYErAAHY*%*(80JblyT+~BUg@U22`J=tP(y+>Wc~w(cR$!GXGkTlK9RNj nz4DEZ@@r3krGO5cz|A1O%Jk!zbM|^b$1`}k`njxgN@xNA*ce=S literal 0 HcmV?d00001 diff --git a/src/img/300/tree-checked.png b/src/img/300/tree-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..f3de8d0a6c778d7b798c4a6ebabafed6391a0cc6 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVxatW5N34Jm|X!BJm%@* z7?N=>IYEMTae_!sQzJ_cbLvLVSCfoAVv=P}ojW9vo_2gjLhu2TE6E8bsvA-n-nOaF ze&(aTJ4;)D7aXov}cyqGPg)0Y+MobWqGEcWke6eoszVi~XyqhGr zcd_{^YwlRRZGQE)`4hxvXz((3@gDfVq?rEyzx#oPTQ7ebBr&Sqn!zD)00;`w%6OFT p9!e;XED)1wNdLG(-HmrHBg4#Ps*~^MD1h9@;OXk;vd$@?2>@XfM#=yH literal 0 HcmV?d00001 diff --git a/src/img/pflicht.png b/src/img/pflicht.png new file mode 100644 index 0000000000000000000000000000000000000000..90a33515c6347c5b0c6cd603b33b53cde6b14d42 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X$M%Ak65bF}ngNnB(c< z7-DfcIYA=h07vqSC3=>J4;)D7aXov}cyqE(f#iXvBW8K$N)81CSl7-sv=iU3fV)D< z^I+`OzjrqOZ`pIeB~v0GhoMcpqtGmlIcxd*!yT-XcoKlX!q~cPVqT)b4jv0`-UFL? boPln$yeocCo6jHzXfK1OtDnm{r-UW|Ww1S0 literal 0 HcmV?d00001 diff --git a/src/img/tree-checked-partly.png b/src/img/tree-checked-partly.png new file mode 100644 index 0000000000000000000000000000000000000000..6480d238238645f2e40aac2ffc91b18d1ecf8b10 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X$M%Ak65bF}ngNSm^2E z7-DfcIYA=hfX5oA$yZd5!)Y|9G-d8P~+h-lOKOQimV*IZCV=xC=&fw|l=d#Wzp$PyxghlQE literal 0 HcmV?d00001 diff --git a/src/img/tree-checked.png b/src/img/tree-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..52701e339ce527166d8f38a964cfbd8eae170e68 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X$M%Ak65bF}ngNIMLI^ zF~s6@a)Lz00gp9Kldq_zOGrrcEWEQhJ?;1m0}z;)Ftf0DnXvPOc1`9;XN`Vx;kW%~5D