///**
// * This file is part of Faktotum.
// *
// *
// * Faktotum is free software: you can redistribute it and/or
// * modify it under the terms of the GNU Lesser General Public License
// * as published by the Free Software Foundation, either version 3 of
// * the License, or (at your option) any later version.
// *
// * Faktotum 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 Lesser General Public License for more details.
// *
// * You should have received a copy of the GNU Lesser General Public
// * License along with Faktotum.
// *
// * If not, see <http://www.gnu.org/licenses/>.
// */
//package de.romankreisel.faktotum.helper;
//
//import java.io.BufferedInputStream;
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileReader;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.nio.charset.Charset;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.TreeMap;
//
//import org.apache.commons.lang3.StringUtils;
//
//import de.romankreisel.faktotum.datamodel.BundesbruderEntity;
//import de.romankreisel.faktotum.datamodel.FaktotumEntity;
//import de.romankreisel.faktotum.datamodel.MemberStatusEntity;
//
//public class HistorieImport {
//
// public class ImportResults {
// private int numberOfBundesbrueder = 0;
// private int numberOfRelationships = 0;
// private Map<Integer, MemberStatusEntity> status;
// private Map<Long, BundesbruderEntity> bundesbruederMap;
// private final List<FaktotumEntity> entities = new ArrayList<FaktotumEntity>();
//
// public Map<Long, BundesbruderEntity> getBundesbruederMap() {
// return this.bundesbruederMap;
// }
//
// public List<FaktotumEntity> getEntities() {
// return this.entities;
// }
//
// public int getNumberOfBundesbrueder() {
// return this.numberOfBundesbrueder;
// }
//
// public int getNumberOfRelationships() {
// return this.numberOfRelationships;
// }
//
// public Map<Integer, MemberStatusEntity> getStatus() {
// return this.status;
// }
//
// public void setStatus(Map<Integer, MemberStatusEntity> status) {
// this.status = status;
// }
//
// }
//
// public int createRelations(File file, Map<Long, BundesbruderEntity> bundesbrueder) throws IOException {
// int retVal = 0;
// BufferedReader reader = null;
// try {
// reader = new BufferedReader(new FileReader(file));
// String line = null;
// boolean firstLine = true;
// while ((line = reader.readLine()) != null) {
// if (firstLine) { // skip the first line
// firstLine = false;
// continue;
// }
// String[] datasetArray = line.split("\t");
// if (datasetArray.length == 2) {
// try {
// long biervaterid = Long.parseLong(datasetArray[0]);
// long biersohnid = Long.parseLong(datasetArray[1]);
// BundesbruderEntity biersohn = bundesbrueder.get(biersohnid);
// if (biersohn != null) {
// if (biervaterid != 2720) {
// BundesbruderEntity biervater = bundesbrueder.get(biervaterid);
// if (biervater != null) {
// biersohn.setLeibBursche(biervater);
// biersohn.setFounderMember(false);
// } else {
// System.out.println("Leibbursche " + biervaterid + " not found");
// continue;
// }
// } else {
// biersohn.setFounderMember(true);
// }
// } else {
// System.out.println("Leibfux " + biersohnid + " not found");
// continue;
// }
// retVal++;
// } catch (NumberFormatException e) {
// System.out.println("Error parsing line: " + line);
// e.printStackTrace();
// }
// } else {
// throw new IOException("Unexpected input data!");
// }
// }
// } finally {
// if (reader != null) {
// reader.close();
// reader = null;
// }
// }
// return retVal;
// }
//
// public Map<Integer, MemberStatusEntity> createStatus() {
// TreeMap<Integer, MemberStatusEntity> map = new TreeMap<Integer, MemberStatusEntity>();
// for (int i = 0; i <= 6; ++i) {
// String name;
// switch (i) {
// case 1:
// name = "Aktiv";
// break;
// case 2:
// name = "Inaktiv";
// break;
// case 3:
// name = "AH";
// break;
// case 4:
// name = "Ausgetreten";
// break;
// case 5:
// name = "Verstorben";
// break;
// case 6:
// name = "EAH";
// break;
// case 7:
// name = "Philister";
// break;
// default:
// name = "Unbestimmt";
// }
// MemberStatusEntity memberStatus = new MemberStatusEntity();
// memberStatus.setName(name);
// map.put(i, memberStatus);
// }
// return map;
// }
//
// private String getValueFromArray(String[] array, int position) {
// if (array.length > position) {
// String retVal = array[position];
// if (!retVal.trim().equals("NULL")) {
// return retVal;
// }
// }
// return null;
// }
//
// public Map<Long, BundesbruderEntity> importBundesbruder(File tsvFile, File pictureDirectory, Map<Integer, MemberStatusEntity> status) throws IOException {
// BufferedReader reader = null;
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// Map<Long, BundesbruderEntity> map = new TreeMap<Long, BundesbruderEntity>();
// try {
// reader = new BufferedReader(new InputStreamReader(new FileInputStream(tsvFile), Charset.forName("UTF-8")));
// String line = null;
// boolean firstLine = true;
// while ((line = reader.readLine()) != null) {
// if (firstLine) { // skip the first line
// firstLine = false;
// continue;
// }
// String[] datasetArray = line.split("\t");
//
// String idString = this.getValueFromArray(datasetArray, 0);
// try {
// long id = Long.parseLong(idString);
//
// BundesbruderEntity bundesbruder = new BundesbruderEntity();
// String firstName = this.getValueFromArray(datasetArray, 1);
// if (!StringUtils.isEmpty(firstName) && !firstName.trim().equals("-")) {
// firstName = firstName.trim();
// bundesbruder.setFirstName(firstName);
// }
// String lastName = this.getValueFromArray(datasetArray, 2);
// if (!StringUtils.isEmpty(lastName) && !lastName.trim().equals("-")) {
// bundesbruder.setLastName(lastName);
// }
// String kneipName = this.getValueFromArray(datasetArray, 3);
// if (!StringUtils.isEmpty(kneipName) && !kneipName.trim().equals("-")) {
// kneipName = kneipName.trim();
// if (kneipName.endsWith("III")) {
// bundesbruder.setKneipname(kneipName.substring(0, kneipName.lastIndexOf("III")).trim());
// bundesbruder.setKneipnameAppendix(3);
// } else if (kneipName.endsWith("II")) {
// bundesbruder.setKneipname(kneipName.substring(0, kneipName.lastIndexOf("II")).trim());
// bundesbruder.setKneipnameAppendix(2);
// } else if (kneipName.endsWith("I")) {
// bundesbruder.setKneipname(kneipName.substring(0, kneipName.lastIndexOf("I")).trim());
// bundesbruder.setKneipnameAppendix(1);
// } else {
// bundesbruder.setKneipname(kneipName);
// bundesbruder.setKneipnameAppendix(1);
// }
// }
//
// String birthDateString = this.getValueFromArray(datasetArray, 4);
// if (!StringUtils.isEmpty(birthDateString) && !birthDateString.trim().equals("0000-00-00")) {
// try {
// bundesbruder.setBirthDate(simpleDateFormat.parse(birthDateString));
// } catch (ParseException e) {
// System.out.println("Date cannot be parsed: " + birthDateString);
// }
// }
// String firstActiveSemesterString = this.getValueFromArray(datasetArray, 6);
// if (!StringUtils.isEmpty(firstActiveSemesterString)) {
// try {
// int firstActiveSemester = Integer.parseInt(firstActiveSemesterString);
// if (firstActiveSemester > 0) {
// bundesbruder.setFirstActiveSemester(firstActiveSemester);
// }
// } catch (NumberFormatException e) {
// System.out.println("First Active Semester cannot be parsed: " + firstActiveSemesterString);
// }
// }
//
// String lastActiveSemesterString = this.getValueFromArray(datasetArray, 7);
// if (!StringUtils.isEmpty(lastActiveSemesterString)) {
// try {
// int lastActiveSemester = Integer.parseInt(lastActiveSemesterString);
// if (lastActiveSemester > 0) {
// bundesbruder.setLastActiveSemester(lastActiveSemester);
// }
// } catch (NumberFormatException e) {
// System.out.println("Last Active Semester cannot be parsed: " + lastActiveSemesterString);
// }
// }
//
// String statusString = this.getValueFromArray(datasetArray, 8);
// int statusInt = 0;
// if (!StringUtils.isEmpty(statusString)) {
// try {
// statusInt = Integer.parseInt(statusString);
// } catch (NumberFormatException e) {
// System.out.println("Status cannot be parsed: " + lastActiveSemesterString);
// }
// }
// bundesbruder.setMemberStatus(status.get(statusInt));
//
// File pictureFile = new File(pictureDirectory, id + ".jpg");
// if (pictureFile.exists() && pictureFile.isFile() && pictureFile.canRead()) {
// InputStream pictureFileInputStream = null;
// try {
// pictureFileInputStream = new BufferedInputStream(new FileInputStream(pictureFile));
// ArrayList<Byte> picture = new ArrayList<Byte>();
// int nextByte;
// while ((nextByte = pictureFileInputStream.read()) >= 0) {
// picture.add((byte) nextByte);
// }
// bundesbruder.setPicture(picture.toArray(new Byte[picture.size()]));
// } catch (IOException e) {
// System.out.println("Error reading file " + pictureFile.getAbsolutePath());
// } finally {
// if (pictureFileInputStream != null) {
// try {
// pictureFileInputStream.close();
// } catch (IOException e) {
// System.out.println("Error closing file " + pictureFile.getAbsolutePath());
// } finally {
// pictureFileInputStream = null;
// }
// }
// }
// }
//
// if (id != 2720) { // do not import "virtual" urburschen BB
// map.put(id, bundesbruder);
// System.out.println(bundesbruder);
// }
// } catch (NumberFormatException e) {
// System.out.println("Error reading ID: " + idString);
// }
//
// }
//
// return map;
// } finally {
// if (reader != null) {
// reader.close();
// reader = null;
// }
// }
// }
//
// public ImportResults importFromHistorie() throws IOException {
// ImportResults retVal = new ImportResults();
// HistorieImport importer = new HistorieImport();
// retVal.setStatus(importer.createStatus());
// Map<Long, BundesbruderEntity> bundesbrueder = importer.importBundesbruder(new File("E:/history-data/bb.txt"), new File("E:/history-data/bilder"),
// retVal.getStatus());
// retVal.numberOfBundesbrueder = bundesbrueder.size();
// retVal.numberOfRelationships = importer.createRelations(new File("E:/history-data/verwandschaften.txt"), bundesbrueder);
// retVal.bundesbruederMap = bundesbrueder;
// // retVal.getEntities().add(neo);
// // retVal.getEntities().add(user);
// // neo.setUser(user);
// return retVal;
// }
// }