/**
* 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;
}
}