/**
   * @see de.willuhn.jameica.gui.calendar.AppointmentProvider#getAppointments(java.util.Date,
   *     java.util.Date)
   */
  @Override
  public List<Appointment> getAppointments(Date from, Date to) {
    if (from == null) {
      return null;
    }
    try {
      DBIterator list =
          Einstellungen.getDBService().createList(de.jost_net.JVerein.rmi.Wiedervorlage.class);
      Calendar cal = Calendar.getInstance();
      cal.setTime(from);
      if (from != null)
        list.addFilter("datum >= ?", new Object[] {new java.sql.Date(from.getTime())});
      list.addFilter("datum <= ?", new Object[] {new java.sql.Date(to.getTime())});
      list.setOrder("ORDER BY day(datum)");

      List<Appointment> result = new LinkedList<Appointment>();
      while (list.hasNext()) {
        result.add(new MyAppointment((Wiedervorlage) list.next()));
      }
      return result;
    } catch (Exception e) {
      Logger.error("unable to load data", e);
    }
    return null;
  }
  public Part getAbrechungslaeufeList() throws RemoteException {
    DBService service = Einstellungen.getDBService();
    DBIterator abrechnungslaeufe = service.createList(Abrechnungslauf.class);
    abrechnungslaeufe.setOrder("ORDER BY datum DESC");

    if (abrechnungslaufList == null) {
      abrechnungslaufList = new TablePart(abrechnungslaeufe, null);
      abrechnungslaufList.addColumn("Nr", "nr");
      abrechnungslaufList.addColumn(
          "Datum", "datum", new DateFormatter(new JVDateFormatTTMMJJJJ()));
      abrechnungslaufList.addColumn(
          "Modus", "modus", new AbrechnungsmodusFormatter(), false, Column.ALIGN_LEFT);
      abrechnungslaufList.addColumn(
          "Stichtag", "stichtag", new DateFormatter(new JVDateFormatTTMMJJJJ()));
      abrechnungslaufList.addColumn(
          "Eingabedatum", "eingabedatum", new DateFormatter(new JVDateFormatTTMMJJJJ()));
      abrechnungslaufList.addColumn("Zahlungsgrund", "zahlungsgrund");
      abrechnungslaufList.addColumn("Zusatzbeträge", "zusatzbetraege", new JaNeinFormatter());
      abrechnungslaufList.addColumn("Kursteilnehmer", "kursteilnehmer", new JaNeinFormatter());
      abrechnungslaufList.setContextMenu(new AbrechnungslaufMenu());
      abrechnungslaufList.setRememberColWidths(true);
      abrechnungslaufList.setRememberOrder(true);
      abrechnungslaufList.setSummary(true);
    } else {
      abrechnungslaufList.removeAll();
      while (abrechnungslaeufe.hasNext()) {
        abrechnungslaufList.addItem(abrechnungslaeufe.next());
      }
    }
    return abrechnungslaufList;
  }
 public FamilienbeitragNode() throws RemoteException {
   this.parent = null;
   this.type = ROOT;
   this.children = new ArrayList<FamilienbeitragNode>();
   DBIterator it = Einstellungen.getDBService().createList(Beitragsgruppe.class);
   it.addFilter("beitragsart = ?", new Object[] {ArtBeitragsart.FAMILIE_ZAHLER});
   while (it.hasNext()) {
     Beitragsgruppe bg = (Beitragsgruppe) it.next();
     DBIterator it2 = Einstellungen.getDBService().createList(Mitglied.class);
     it2.addFilter("beitragsgruppe = ?", new Object[] {bg.getID()});
     it2.addFilter("austritt is null");
     while (it2.hasNext()) {
       Mitglied m = (Mitglied) it2.next();
       FamilienbeitragNode fbn = new FamilienbeitragNode(this, m);
       children.add(fbn);
     }
   }
 }
 private Beitragsgruppe getBeitragsgruppe() throws RemoteException {
   Beitragsgruppe bg =
       (Beitragsgruppe) Einstellungen.getDBService().createObject(Beitragsgruppe.class, null);
   bg.setBezeichnung("Test");
   bg.setBetrag(10d);
   bg.setBetragMonatlich(20d);
   bg.setBetragVierteljaehrlich(60d);
   bg.setBetragHalbjaehrlich(120d);
   bg.setBetragJaehrlich(240d);
   return bg;
 }
 public FamilienbeitragNode(FamilienbeitragNode parent, Mitglied m) throws RemoteException {
   this.parent = parent;
   this.mitglied = m;
   this.type = ZAHLER;
   this.children = new ArrayList<FamilienbeitragNode>();
   DBIterator it = Einstellungen.getDBService().createList(Mitglied.class);
   it.addFilter("zahlerid = ?", new Object[] {m.getID()});
   it.addFilter("austritt is null");
   while (it.hasNext()) {
     FamilienbeitragNode fbn = new FamilienbeitragNode(this, (Mitglied) it.next(), 1);
     children.add(fbn);
   }
 }
  /** @see de.willuhn.jameica.gui.Action#handleAction(java.lang.Object) */
  public void handleAction(Object context) {
    try {
      DBIterator it = Einstellungen.getDBService().createList(Mitglied.class);
      if (it.size() > 0) {
        SimpleDialog dialog = new SimpleDialog(SimpleDialog.POSITION_CENTER);
        dialog.setTitle("Fehler");
        dialog.setText("Datenbank ist nicht leer!");
        dialog.open();
        return;
      }

      // Vom System eingefügte Sätze löschen. Ansonsten gibt es duplicate keys
      it = Einstellungen.getDBService().createList(Adresstyp.class);
      while (it.hasNext()) {
        Adresstyp a = (Adresstyp) it.next();
        a.delete();
      }

    } catch (Exception e1) {
      Logger.error("Fehler: ", e1);
    }

    FileDialog fd = new FileDialog(GUI.getShell(), SWT.OPEN);
    fd.setFileName("jverein-" + new JVDateFormatJJJJMMTT().format(new Date()) + ".xml");
    fd.setFilterExtensions(new String[] {"*.xml"});
    fd.setText(JVereinPlugin.getI18n().tr("Bitte wählen Sie die Backup-Datei aus"));
    String f = fd.open();
    if (f == null || f.length() == 0) {
      return;
    }

    final File file = new File(f);
    if (!file.exists()) {
      return;
    }

    Application.getController()
        .start(
            new BackgroundTask() {

              private boolean cancel = false;

              /**
               * @see de.willuhn.jameica.system.BackgroundTask#run(de.willuhn.util.ProgressMonitor)
               */
              public void run(ProgressMonitor monitor) throws ApplicationException {
                monitor.setStatusText(JVereinPlugin.getI18n().tr("Importiere Backup"));
                Logger.info("importing backup " + file.getAbsolutePath());
                final ClassLoader loader =
                    Application.getPluginLoader()
                        .getPlugin(JVereinPlugin.class)
                        .getResources()
                        .getClassLoader();

                try {
                  EigenschaftGruppe eg =
                      (EigenschaftGruppe)
                          Einstellungen.getDBService().createObject(EigenschaftGruppe.class, "1");
                  eg.delete();
                } catch (RemoteException e1) {
                  Logger.error("EigenschaftGruppe mit id=1 kann nicht gelöscht werden", e1);
                }

                Reader reader = null;
                try {
                  InputStream is = new BufferedInputStream(new FileInputStream(file));
                  reader =
                      new XmlReader(
                          is,
                          new ObjectFactory() {

                            public GenericObject create(String type, String id, Map values)
                                throws Exception {
                              AbstractDBObject object =
                                  (AbstractDBObject)
                                      Einstellungen.getDBService()
                                          .createObject(loader.loadClass(type), null);
                              object.setID(id);
                              Iterator<?> i = values.keySet().iterator();
                              while (i.hasNext()) {
                                String name = (String) i.next();
                                object.setAttribute(name, values.get(name));
                              }
                              return object;
                            }
                          });

                  long count = 1;
                  GenericObject o = null;
                  while ((o = reader.read()) != null) {
                    try {
                      ((AbstractDBObject) o).insert();
                    } catch (Exception e) {
                      Logger.error(
                          "unable to import "
                              + o.getClass().getName()
                              + ":"
                              + o.getID()
                              + ", skipping",
                          e);
                      monitor.log(
                          JVereinPlugin.getI18n()
                              .tr(
                                  " {0} fehlerhaft: {1}, überspringe ",
                                  new String[] {BeanUtil.toString(o), e.getMessage()}));
                    }
                    if (count++ % 100 == 0) {
                      monitor.addPercentComplete(1);
                    }
                  }
                  monitor.setStatus(ProgressMonitor.STATUS_DONE);
                  monitor.setStatusText(JVereinPlugin.getI18n().tr("Backup importiert"));
                  monitor.setPercentComplete(100);
                } catch (Exception e) {
                  Logger.error("error while importing data", e);
                  throw new ApplicationException(e.getMessage());
                } finally {
                  if (reader != null) {
                    try {
                      reader.close();
                      Logger.info("backup imported");
                    } catch (Exception e) {
                      /* useless */
                    }
                  }
                }
              }

              /** @see de.willuhn.jameica.system.BackgroundTask#isInterrupted() */
              public boolean isInterrupted() {
                return this.cancel;
              }

              /** @see de.willuhn.jameica.system.BackgroundTask#interrupt() */
              public void interrupt() {
                this.cancel = true;
              }
            });
  }