Package de.chris_soft.fyllgen.export

Source Code of de.chris_soft.fyllgen.export.DataExporter

/**
* FyLLGen - A Java based tool for collecting and distributing family data
*
* Copyright (C) 2007-2011 Christian Packenius
*
* 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
* 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 <http://www.gnu.org/licenses/>.
*/
package de.chris_soft.fyllgen.export;

import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import de.chris_soft.fyllgen.Statics;
import de.chris_soft.fyllgen.data.OptionData;
import de.chris_soft.fyllgen.data.Person;
import de.chris_soft.fyllgen.data.Relationship;

/**
* Schnittstelle eines Exporters, zum Beispiel f�r PDF-, Text- und CSV-Dateien.
* @author Christian Packenius, 20110209.
*/
public abstract class DataExporter {
  /**
   * Angabe, ob eine Druckversion erstellt werden soll.
   */
  protected boolean createPrintVersion = false;

  /**
   * Ermittelt den kurzen Titel.
   * @return Titel des Exporters.
   */
  public abstract String getShortTitle();

  /**
   * Ermittelt den langen Titel, zum Beispiel f�r Label.
   * @return Titel des Exporters.
   */
  public abstract String getLongTitle();

  /**
   * Ermittelt die Dateierweiterung.
   * @return Dateierweiterung.
   */
  public abstract String getFileExtension();

  /**
   * Exportieren der Datei in einen Ausgabedatenstrom.
   * @param persons Personenliste.
   * @param out Ausgabedatenstrom.
   * @return ID der exportierten Datei (laufende Nummer).
   * @throws Exception Eventuell geworfene Exception.
   */
  public abstract long export(List<Person> persons, OutputStream out) throws Exception;

  /**
   * Erzeugt einen Eintrag in der LOG-Datei, dass etwas exportiert wurde.
   * @param persons Liste von Personen (darf nicht leer oder null sein!).
   * @param exporter
   * @return Document number.
   * @throws IOException
   */
  public static long createExportedFilesEntry(List<Person> persons, DataExporter exporter) throws IOException {
    Person person0 = persons.get(0);
    String person0Mail = person0.getValue(Person.MAIL);

    SimpleDateFormat dayForm = new SimpleDateFormat("dd.");
    SimpleDateFormat timeForm = new SimpleDateFormat("HH.mm");
    String day = dayForm.format(new Date());
    String date = day + " " + Statics.currentMonth + " " + Statics.currentYear;
    String time = timeForm.format(new Date());

    String person0Name = person0.getValueView(Person.NAME);
    String rem0 = "Erzeugt f�r " + person0Name;
    if (person0Mail != null && person0Mail.trim().length() > 0) {
      rem0 += " [" + person0Mail.trim() + "]";
    }
    String rem1 = "Erzeugt am " + date + ", " + time;
    String rem2 = "Erzeugt mit " + persons.size() + " Personen";
    String rem3 = "Export-Dateityp: " + exporter.getShortTitle();
    String[] remarks = new String[] { rem0, rem1, rem2, rem3 };
    long documentID = OptionData.instance.getNewPdfExportNumber(remarks);

    return documentID;
  }

  /**
   * Get the header of a small person list of a special relation type.
   * @param personList Liste der darzustellenden Personen.
   * @param relationType Relationtyp of the persons (from the current person).
   * @return Title for person list.
   */
  public String getHeaderForPersonList(Person[] personList, String relationType) {
    String personListHeader = "";
    personListHeader = relationType.equals(Relationship.PARENTS) ? getParentsHeader(personList) : personListHeader;
    personListHeader = relationType.equals(Relationship.CHILDREN) ? getChildrenHeader(personList) : personListHeader;
    personListHeader = relationType.equals(Relationship.PARTNERS) ? getPartnersHeader(personList) : personListHeader;
    personListHeader = relationType.equals(Relationship.SIBLINGS) ? getSiblingsHeader(personList) : personListHeader;
    return personListHeader;
  }

  /**
   * Get header for parents.
   */
  private String getParentsHeader(Person[] personList) {
    int count = personList.length;
    if (count == 0) {
      return "Eltern unbekannt";
    }
    boolean male = false, female = false;
    boolean single = count == 1;
    for (Person p : personList) {
      String sex = p.getValue(Person.SEX);
      male |= Person.MALE.equals(sex);
      female |= Person.FEMALE.equals(sex);
    }
    if (male && !female) {
      return single ? "Vater" : "V�ter";
    }
    if (female && !male) {
      return single ? "Mutter" : "M�tter";
    }
    return "Eltern";
  }

  /**
   * Get header for partners.
   */
  private String getPartnersHeader(Person[] personList) {
    int count = personList.length;
    if (count == 0) {
      return "Keine Partner bekannt";
    }
    boolean male = false, female = false;
    boolean single = count == 1;
    for (Person p : personList) {
      String sex = p.getValue(Person.SEX);
      male |= Person.MALE.equals(sex);
      female |= Person.FEMALE.equals(sex);
    }
    if (male && !female) {
      return "Partner";
    }
    if (female && !male) {
      return single ? "Partnerin" : "Partnerinnen";
    }
    return "Partner/Partnerinnen";
  }

  /**
   * Get header for children.
   */
  private String getChildrenHeader(Person[] personList) {
    int count = personList.length;
    if (count == 0) {
      return "Keine Kinder bekannt";
    }
    boolean male = false, female = false;
    boolean single = count == 1;
    for (Person p : personList) {
      String sex = p.getValue(Person.SEX);
      male |= Person.MALE.equals(sex);
      female |= Person.FEMALE.equals(sex);
    }
    if (male && !female) {
      return single ? "Sohn" : "S�hne";
    }
    if (female && !male) {
      return single ? "Tochter" : "T�chter";
    }
    return "Kinder";
  }

  /**
   * Get header for brothers and sisters.
   */
  private String getSiblingsHeader(Person[] personList) {
    int count = personList.length;
    if (count == 0) {
      return "Keine Geschwister bekannt";
    }
    boolean male = false, female = false;
    boolean single = count == 1;
    for (Person p : personList) {
      String sex = p.getValue(Person.SEX);
      male |= Person.MALE.equals(sex);
      female |= Person.FEMALE.equals(sex);
    }
    if (male && !female) {
      return single ? "Bruder" : "Br�der";
    }
    if (female && !male) {
      return single ? "Schwester" : "Schwestern";
    }
    return "Geschwister";
  }

  /**
   * Setzt, ob eine Druckversion erstellt werden soll. Default ist <i>false</i>.
   * @param createPrintVersion true/false.
   */
  public void setCreatePrintVersion(boolean createPrintVersion) {
    this.createPrintVersion = createPrintVersion;
  }
}
TOP

Related Classes of de.chris_soft.fyllgen.export.DataExporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.