/* * Copyright (c) 2010 Jens Pelzetter, * for the Center of Social Politics of the University of Bremen * * This library 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 2.1 of * the License, or (at your option) any later version. * * This library 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 this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package com.arsdigita.cms.dabin; import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.FileAsset; import com.arsdigita.cms.Folder; import com.arsdigita.cms.ItemCollection; import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.Address; import com.arsdigita.cms.contenttypes.ArticleInCollectedVolume; import com.arsdigita.cms.contenttypes.ArticleInJournal; import com.arsdigita.cms.contenttypes.CollectedVolume; import com.arsdigita.cms.contenttypes.Contact; import com.arsdigita.cms.contenttypes.FileStorageItem; import com.arsdigita.cms.contenttypes.GenericContactEntry; import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.GreyLiterature; import com.arsdigita.cms.contenttypes.Link; import com.arsdigita.cms.contenttypes.Monograph; import com.arsdigita.cms.contenttypes.Person; import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.Publisher; import com.arsdigita.cms.contenttypes.SciAuthor; import com.arsdigita.cms.contenttypes.SciDepartment; import com.arsdigita.cms.contenttypes.SciMember; import com.arsdigita.cms.contenttypes.SciOrganization; import com.arsdigita.cms.contenttypes.SciProject; import com.arsdigita.cms.contenttypes.WorkingPaper; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.london.terms.Domain; import com.arsdigita.london.terms.Term; import com.arsdigita.london.util.Transaction; import com.arsdigita.packaging.Program; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Calendar; import java.util.Enumeration; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.apache.commons.cli.CommandLine; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; /** * * @author Jens Pelzetter */ public class DaBInImporter extends Program { private static final Logger logger = Logger.getLogger(DaBInImporter.class); private Properties config; private ContentSection section; private Connection connection = null; private Folder root; private Folder authors; private Map authorsAlpha; private Folder contacts; private Map contactsAlpha; private Folder departments; private Folder members; private Map membersAlpha; private Folder organization; private Folder persons; private Map personsAlpha; private Folder projects; private Map projectsAlpha; private Folder publications; private Map publicationsAlpha; private Folder publishers; private Map publishersAlpha; private Folder files; private Map filesAlpha; private Map departmentsMap; private Map personsMap; private Map projectsMap; private Map publishersMap; private Map publicationMap; private Map workingPaperMap; private SciOrganization orgaDe; private SciOrganization orgaEn; private ContentBundle orga; private Address postalAddress; private Address officeAddress; private Domain termsDomain; private Term publicationsTerm; private Map publicationTerms; private Term workingPapersTerm; private Map workingPaperTerms; private Term currentProjectsTerm; private Term finishedProjectsTerm; public DaBInImporter() { this(true); } public DaBInImporter(boolean startup) { super("DaBInImporter", "0.1.0", "configFile", startup); authorsAlpha = new HashMap(27); membersAlpha = new HashMap(27); personsAlpha = new HashMap(27); contactsAlpha = new HashMap(27); projectsAlpha = new HashMap(27); publicationsAlpha = new HashMap(27); publishersAlpha = new HashMap(27); filesAlpha = new HashMap(27); departmentsMap = new HashMap(); personsMap = new HashMap(); projectsMap = new HashMap(); publishersMap = new HashMap(); publicationMap = new HashMap(); workingPaperMap = new HashMap(); publicationTerms = new HashMap(30); workingPaperTerms = new HashMap(30); } @Override protected void doRun(CommandLine cmdLine) { final String args[]; String mySqlHost; String mySqlUser; String mySqlPassword; String mySqlDb; System.out.println(""); System.out.println(""); System.out.println("DaBInImporter starting..."); //Get command line arguments... args = cmdLine.getArgs(); if (args.length != 1) { System.out.println("Invalid number of arguments."); help(System.err); System.exit(-1); } config = new Properties(); try { config.loadFromXML(new FileInputStream(args[0])); } catch (FileNotFoundException ex) { System.err.printf("Configuration file '%s' not found:\n", args[0]); ex.printStackTrace(System.err); System.exit(-1); } catch (IOException ex) { System.err.printf("Failed to read configuration file '%s' " + "not found:\n", args[0]); ex.printStackTrace(System.err); System.exit(-1); } mySqlHost = config.getProperty("mysql.host", "localhost"); mySqlUser = config.getProperty("mysql.user"); mySqlPassword = config.getProperty("mysql.password"); mySqlDb = config.getProperty("mysql.db"); section = getContentSection(config.getProperty("ccm.contentsection")); //Create connection to the DaBIn MySQL database System.out.println("Trying to connect to DaBIn MySQL database with these " + "parameters:"); System.out.printf("Host = %s\n", mySqlHost); System.out.printf("User = %s\n", mySqlUser); //logger.info(String.format("Password = %s", mySqlPassword)); System.out.printf("Database = %s\n", mySqlDb); try { connection = DriverManager.getConnection( String.format("jdbc:mysql://%s/%s", mySqlHost, mySqlDb), mySqlUser, mySqlPassword); } catch (SQLException ex) { System.err.println("Failed to connect to DaBIn MySQL database: "); ex.printStackTrace(System.err); try { if (connection != null) { connection.close(); } } catch (SQLException ex1) { System.err.println("Failed to close failed connection: "); ex1.printStackTrace(System.err); } System.exit(-1); } Folder folder; System.out.println( "\nCreating CCM folders (if they do not exist already)..."); root = section.getRootFolder(); authors = createFolder(root, "autoren", "Autoren"); folder = createFolder(authors, "09", "0-9"); authorsAlpha.put('0', folder); folder = createFolder(authors, "ab", "A-B"); authorsAlpha.put('a', folder); authorsAlpha.put('b', folder); folder = createFolder(authors, "cd", "C-D"); authorsAlpha.put('c', folder); authorsAlpha.put('d', folder); folder = createFolder(authors, "ef", "E-F"); authorsAlpha.put('e', folder); authorsAlpha.put('f', folder); folder = createFolder(authors, "gh", "G-H"); authorsAlpha.put('g', folder); authorsAlpha.put('h', folder); folder = createFolder(authors, "ij", "I-J"); authorsAlpha.put('i', folder); authorsAlpha.put('j', folder); folder = createFolder(authors, "kl", "K-L"); authorsAlpha.put('k', folder); authorsAlpha.put('l', folder); folder = createFolder(authors, "mn", "M-N"); authorsAlpha.put('m', folder); authorsAlpha.put('n', folder); folder = createFolder(authors, "op", "O-P"); authorsAlpha.put('o', folder); authorsAlpha.put('p', folder); folder = createFolder(authors, "qr", "Q-R"); authorsAlpha.put('q', folder); authorsAlpha.put('r', folder); folder = createFolder(authors, "st", "S-T"); authorsAlpha.put('s', folder); authorsAlpha.put('t', folder); folder = createFolder(authors, "uv", "U-V"); authorsAlpha.put('u', folder); authorsAlpha.put('v', folder); folder = createFolder(authors, "wxzy", "W-Z"); authorsAlpha.put('w', folder); authorsAlpha.put('x', folder); authorsAlpha.put('y', folder); authorsAlpha.put('z', folder); contacts = createFolder(root, "kontaktdaten", "Kontaktdaten"); folder = createFolder(contacts, "09", "0-9"); contactsAlpha.put('0', folder); folder = createFolder(contacts, "ab", "A-B"); contactsAlpha.put('a', folder); contactsAlpha.put('b', folder); folder = createFolder(contacts, "cd", "C-D"); contactsAlpha.put('c', folder); contactsAlpha.put('d', folder); folder = createFolder(contacts, "ef", "E-F"); contactsAlpha.put('e', folder); contactsAlpha.put('f', folder); folder = createFolder(contacts, "gh", "G-H"); contactsAlpha.put('g', folder); contactsAlpha.put('h', folder); folder = createFolder(contacts, "ij", "I-J"); contactsAlpha.put('i', folder); contactsAlpha.put('j', folder); folder = createFolder(contacts, "kl", "K-L"); contactsAlpha.put('k', folder); contactsAlpha.put('l', folder); folder = createFolder(contacts, "mn", "M-N"); contactsAlpha.put('m', folder); contactsAlpha.put('n', folder); folder = createFolder(contacts, "op", "O-P"); contactsAlpha.put('o', folder); contactsAlpha.put('p', folder); folder = createFolder(contacts, "qr", "Q-R"); contactsAlpha.put('q', folder); contactsAlpha.put('r', folder); folder = createFolder(contacts, "st", "S-T"); contactsAlpha.put('s', folder); contactsAlpha.put('t', folder); folder = createFolder(contacts, "uv", "U-V"); contactsAlpha.put('u', folder); contactsAlpha.put('v', folder); folder = createFolder(contacts, "wxzy", "W-Z"); contactsAlpha.put('w', folder); contactsAlpha.put('x', folder); contactsAlpha.put('y', folder); contactsAlpha.put('z', folder); departments = createFolder(root, "abteilungen", "Abteilungen"); members = createFolder(root, "mitglieder", "Mitglieder"); folder = createFolder(members, "09", "0-9"); membersAlpha.put('0', folder); folder = createFolder(members, "ab", "A-B"); membersAlpha.put('a', folder); membersAlpha.put('b', folder); folder = createFolder(members, "cd", "C-D"); membersAlpha.put('c', folder); membersAlpha.put('d', folder); folder = createFolder(members, "ef", "E-F"); membersAlpha.put('e', folder); membersAlpha.put('f', folder); folder = createFolder(members, "gh", "G-H"); membersAlpha.put('g', folder); membersAlpha.put('h', folder); folder = createFolder(members, "ij", "I-J"); membersAlpha.put('i', folder); membersAlpha.put('j', folder); folder = createFolder(members, "kl", "K-L"); membersAlpha.put('k', folder); membersAlpha.put('l', folder); folder = createFolder(members, "mn", "M-N"); membersAlpha.put('m', folder); membersAlpha.put('n', folder); folder = createFolder(members, "op", "O-P"); membersAlpha.put('o', folder); membersAlpha.put('p', folder); folder = createFolder(members, "qr", "Q-R"); membersAlpha.put('q', folder); membersAlpha.put('r', folder); folder = createFolder(members, "st", "S-T"); membersAlpha.put('s', folder); membersAlpha.put('t', folder); folder = createFolder(members, "uv", "U-V"); membersAlpha.put('u', folder); membersAlpha.put('v', folder); folder = createFolder(members, "wxzy", "W-Z"); membersAlpha.put('w', folder); membersAlpha.put('x', folder); membersAlpha.put('y', folder); membersAlpha.put('z', folder); organization = createFolder(root, "organisationen", "Organisation(en)"); persons = createFolder(root, "personen", "Personen"); folder = createFolder(persons, "09", "0-9"); personsAlpha.put('0', folder); folder = createFolder(persons, "ab", "A-B"); personsAlpha.put('a', folder); personsAlpha.put('b', folder); folder = createFolder(persons, "cd", "C-D"); personsAlpha.put('c', folder); personsAlpha.put('d', folder); folder = createFolder(persons, "ef", "E-F"); personsAlpha.put('e', folder); personsAlpha.put('f', folder); folder = createFolder(persons, "gh", "G-H"); personsAlpha.put('g', folder); personsAlpha.put('h', folder); folder = createFolder(persons, "ij", "I-J"); personsAlpha.put('i', folder); personsAlpha.put('j', folder); folder = createFolder(persons, "kl", "K-L"); personsAlpha.put('k', folder); personsAlpha.put('l', folder); folder = createFolder(persons, "mn", "M-N"); personsAlpha.put('m', folder); personsAlpha.put('n', folder); folder = createFolder(persons, "op", "O-P"); personsAlpha.put('o', folder); personsAlpha.put('p', folder); folder = createFolder(persons, "qr", "Q-R"); personsAlpha.put('q', folder); personsAlpha.put('r', folder); folder = createFolder(persons, "st", "S-T"); personsAlpha.put('s', folder); personsAlpha.put('t', folder); folder = createFolder(persons, "uv", "U-V"); personsAlpha.put('u', folder); personsAlpha.put('v', folder); folder = createFolder(persons, "wxzy", "W-Z"); personsAlpha.put('w', folder); personsAlpha.put('x', folder); personsAlpha.put('y', folder); personsAlpha.put('z', folder); projects = createFolder(root, "projekte", "Projekte"); folder = createFolder(projects, "09", "0-9"); projectsAlpha.put('0', folder); folder = createFolder(projects, "a", "A"); projectsAlpha.put('a', folder); folder = createFolder(projects, "b", "B"); projectsAlpha.put('b', folder); folder = createFolder(projects, "c", "C"); projectsAlpha.put('c', folder); folder = createFolder(projects, "d", "D"); projectsAlpha.put('d', folder); folder = createFolder(projects, "e", "E"); projectsAlpha.put('e', folder); folder = createFolder(projects, "f", "F"); projectsAlpha.put('f', folder); folder = createFolder(projects, "g", "G"); projectsAlpha.put('g', folder); folder = createFolder(projects, "h", "H"); projectsAlpha.put('h', folder); folder = createFolder(projects, "i", "I"); projectsAlpha.put('i', folder); folder = createFolder(projects, "j", "J"); projectsAlpha.put('j', folder); folder = createFolder(projects, "k", "K"); projectsAlpha.put('k', folder); folder = createFolder(projects, "l", "L"); projectsAlpha.put('l', folder); folder = createFolder(projects, "m", "M"); projectsAlpha.put('m', folder); folder = createFolder(projects, "n", "N"); projectsAlpha.put('n', folder); folder = createFolder(projects, "o", "O"); projectsAlpha.put('o', folder); folder = createFolder(projects, "p", "P"); projectsAlpha.put('p', folder); folder = createFolder(projects, "q", "Q"); projectsAlpha.put('q', folder); folder = createFolder(projects, "r", "R"); projectsAlpha.put('r', folder); folder = createFolder(projects, "s", "S"); projectsAlpha.put('s', folder); folder = createFolder(projects, "t", "T"); projectsAlpha.put('t', folder); folder = createFolder(projects, "u", "U"); projectsAlpha.put('u', folder); folder = createFolder(projects, "v", "V"); projectsAlpha.put('v', folder); folder = createFolder(projects, "w", "W"); projectsAlpha.put('w', folder); folder = createFolder(projects, "x", "X"); projectsAlpha.put('x', folder); folder = createFolder(projects, "y", "Y"); projectsAlpha.put('y', folder); folder = createFolder(projects, "z", "Z"); projectsAlpha.put('z', folder); publishers = createFolder(root, "verlage", "Verlage"); folder = createFolder(publishers, "09", "0-9"); publishersAlpha.put('0', folder); folder = createFolder(publishers, "a", "A"); publishersAlpha.put('a', folder); folder = createFolder(publishers, "b", "B"); publishersAlpha.put('b', folder); folder = createFolder(publishers, "c", "C"); publishersAlpha.put('c', folder); folder = createFolder(publishers, "d", "D"); publishersAlpha.put('d', folder); folder = createFolder(publishers, "e", "E"); publishersAlpha.put('e', folder); folder = createFolder(publishers, "f", "F"); publishersAlpha.put('f', folder); folder = createFolder(publishers, "g", "G"); publishersAlpha.put('g', folder); folder = createFolder(publishers, "h", "H"); publishersAlpha.put('h', folder); folder = createFolder(publishers, "i", "I"); publishersAlpha.put('i', folder); folder = createFolder(publishers, "j", "J"); publishersAlpha.put('j', folder); folder = createFolder(publishers, "k", "K"); publishersAlpha.put('k', folder); folder = createFolder(publishers, "l", "L"); publishersAlpha.put('l', folder); folder = createFolder(publishers, "m", "M"); publishersAlpha.put('m', folder); folder = createFolder(publishers, "n", "N"); publishersAlpha.put('n', folder); folder = createFolder(publishers, "o", "O"); publishersAlpha.put('o', folder); folder = createFolder(publishers, "p", "P"); publishersAlpha.put('p', folder); folder = createFolder(publishers, "q", "Q"); publishersAlpha.put('q', folder); folder = createFolder(publishers, "r", "R"); publishersAlpha.put('r', folder); folder = createFolder(publishers, "s", "S"); publishersAlpha.put('s', folder); folder = createFolder(publishers, "t", "T"); publishersAlpha.put('t', folder); folder = createFolder(publishers, "u", "U"); publishersAlpha.put('u', folder); folder = createFolder(publishers, "v", "V"); publishersAlpha.put('v', folder); folder = createFolder(publishers, "w", "W"); publishersAlpha.put('w', folder); folder = createFolder(publishers, "x", "X"); publishersAlpha.put('x', folder); folder = createFolder(publishers, "y", "Y"); publishersAlpha.put('y', folder); folder = createFolder(publishers, "z", "Z"); publishersAlpha.put('z', folder); publications = createFolder(root, "publikationen", "Publikationen"); folder = createFolder(publications, "09", "0-9"); publicationsAlpha.put('0', folder); folder = createFolder(publications, "a", "A"); publicationsAlpha.put('a', folder); folder = createFolder(publications, "b", "B"); publicationsAlpha.put('b', folder); folder = createFolder(publications, "c", "C"); publicationsAlpha.put('c', folder); folder = createFolder(publications, "d", "D"); publicationsAlpha.put('d', folder); folder = createFolder(publications, "e", "E"); publicationsAlpha.put('e', folder); folder = createFolder(publications, "f", "F"); publicationsAlpha.put('f', folder); folder = createFolder(publications, "g", "G"); publicationsAlpha.put('g', folder); folder = createFolder(publications, "h", "H"); publicationsAlpha.put('h', folder); folder = createFolder(publications, "i", "I"); publicationsAlpha.put('i', folder); folder = createFolder(publications, "j", "J"); publicationsAlpha.put('j', folder); folder = createFolder(publications, "k", "K"); publicationsAlpha.put('k', folder); folder = createFolder(publications, "l", "L"); publicationsAlpha.put('l', folder); folder = createFolder(publications, "m", "M"); publicationsAlpha.put('m', folder); folder = createFolder(publications, "n", "N"); publicationsAlpha.put('n', folder); folder = createFolder(publications, "o", "O"); publicationsAlpha.put('o', folder); folder = createFolder(publications, "p", "P"); publicationsAlpha.put('p', folder); folder = createFolder(publications, "q", "Q"); publicationsAlpha.put('q', folder); folder = createFolder(publications, "r", "R"); publicationsAlpha.put('r', folder); folder = createFolder(publications, "s", "S"); publicationsAlpha.put('s', folder); folder = createFolder(publications, "t", "T"); publicationsAlpha.put('t', folder); folder = createFolder(publications, "u", "U"); publicationsAlpha.put('u', folder); folder = createFolder(publications, "v", "V"); publicationsAlpha.put('v', folder); folder = createFolder(publications, "w", "W"); publicationsAlpha.put('w', folder); folder = createFolder(publications, "x", "X"); publicationsAlpha.put('x', folder); folder = createFolder(publications, "y", "Y"); publicationsAlpha.put('y', folder); folder = createFolder(publications, "z", "Z"); publicationsAlpha.put('z', folder); files = createFolder(root, "dateien", "Dateien"); folder = createFolder(files, "09", "0-9"); filesAlpha.put('0', folder); folder = createFolder(files, "a", "A"); filesAlpha.put('a', folder); folder = createFolder(files, "b", "B"); filesAlpha.put('b', folder); folder = createFolder(files, "c", "C"); filesAlpha.put('c', folder); folder = createFolder(files, "d", "D"); filesAlpha.put('d', folder); folder = createFolder(files, "e", "E"); filesAlpha.put('e', folder); folder = createFolder(files, "f", "F"); filesAlpha.put('f', folder); folder = createFolder(files, "g", "G"); filesAlpha.put('g', folder); folder = createFolder(files, "h", "H"); filesAlpha.put('h', folder); folder = createFolder(files, "i", "I"); filesAlpha.put('i', folder); folder = createFolder(files, "j", "J"); filesAlpha.put('j', folder); folder = createFolder(files, "k", "K"); filesAlpha.put('k', folder); folder = createFolder(files, "l", "L"); filesAlpha.put('l', folder); folder = createFolder(files, "m", "M"); filesAlpha.put('m', folder); folder = createFolder(files, "n", "N"); filesAlpha.put('n', folder); folder = createFolder(files, "o", "O"); filesAlpha.put('o', folder); folder = createFolder(files, "p", "P"); filesAlpha.put('p', folder); folder = createFolder(files, "q", "Q"); filesAlpha.put('q', folder); folder = createFolder(files, "r", "R"); filesAlpha.put('r', folder); folder = createFolder(files, "s", "S"); filesAlpha.put('s', folder); folder = createFolder(files, "t", "T"); filesAlpha.put('t', folder); folder = createFolder(files, "u", "U"); filesAlpha.put('u', folder); folder = createFolder(files, "v", "V"); filesAlpha.put('v', folder); folder = createFolder(files, "w", "W"); filesAlpha.put('w', folder); folder = createFolder(files, "x", "X"); filesAlpha.put('x', folder); folder = createFolder(files, "y", "Y"); filesAlpha.put('y', folder); folder = createFolder(files, "z", "Z"); filesAlpha.put('z', folder); System.out.println( "\nRetrieving terms/categories and creating them if necsseary..."); try { termsDomain = Domain.retrieve( (String) config.get("terms.domain.key")); System.out.println("Terms for publications..."); String publicationsTermPath = (String) config.get( "terms.publications"); publicationsTerm = checkTermPath(publicationsTermPath); publicationTerms = checkYearTerms(publicationsTerm, getPublicationYears()); System.out.println("Terms for working papers..."); String workingPapersTermPath = (String) config.get("terms.workingpapers"); workingPapersTerm = checkTermPath(workingPapersTermPath); workingPaperTerms = checkYearTerms(workingPapersTerm, getWorkingPaperYears()); System.out.println("Term for current projects..."); String currentProjectsTermPath = (String) config.get( "terms.projects.current"); currentProjectsTerm = checkTermPath(currentProjectsTermPath); System.out.println("Term for finished projects..."); String finishedProjectsTermPath = (String) config.get( "terms.projects.finished"); finishedProjectsTerm = checkTermPath(finishedProjectsTermPath); } catch (Exception ex) { ex.printStackTrace(System.err); } System.out.print("Creating organization item and " + "postal and office address items..."); Transaction transaction = new Transaction() { public void doRun() { orgaDe = new SciOrganization(); orgaDe.setName(config.getProperty("orga.name.de")); orgaDe.setTitle(config.getProperty("orga.title.de")); orgaDe.setContentSection(section); orgaDe.setLanguage("de"); orgaDe.save(); orgaDe.setContentSection(section); orgaEn = new SciOrganization(); orgaEn.setName(config.getProperty("orga.name.en")); orgaEn.setTitle(config.getProperty("orga.title.en")); orgaEn.setContentSection(section); orgaEn.setLanguage("en"); orgaEn.save(); orgaEn.setContentSection(section); ContentBundle orga = new ContentBundle(orgaDe); orga.addInstance(orgaEn); organization.addItem(orga); if (config.getProperty("orga.address.postal.name") != null) { postalAddress = new Address(); postalAddress.setName(config.getProperty( "orga.address.postal.name")); postalAddress.setTitle(config.getProperty( "orga.address.postal.title")); postalAddress.setAddress(config.getProperty( "orga.address.postal.data"). trim(). replace("\t", ""). replaceAll(" +", " "). replace("\n ", "\n")); postalAddress.setPostalCode(config.getProperty( "orga.address.postal.code")); postalAddress.setCity(config.getProperty( "orga.address.postal.city")); postalAddress.setState(config.getProperty( "orga.address.postal.state")); postalAddress.setIsoCountryCode(config.getProperty( "orga.address.postal.country")); postalAddress.setContentSection(section); postalAddress.setLanguage("de"); postalAddress.save(); ContentBundle bundle = new ContentBundle(postalAddress); organization.addItem(bundle); Contact contact = new Contact(); contact.setName(config.getProperty( "orga.address.postal.name")); contact.setTitle(config.getProperty( "orga.address.postal.title")); contact.setAddress(postalAddress); contact.setLanguage("de"); contact.save(); bundle = new ContentBundle(contact); organization.addItem(bundle); orgaDe.addContact(contact, "postalAddress"); orgaDe.save(); orgaEn.addContact(contact, "postalAddress"); orgaEn.save(); } if (config.getProperty("orga.address.office.name") != null) { officeAddress = new Address(); officeAddress.setName(config.getProperty( "orga.address.office.name")); officeAddress.setTitle(config.getProperty( "orga.address.office.title")); officeAddress.setAddress(config.getProperty( "orga.address.office.data"). trim(). replace("\t", ""). replaceAll(" +", " "). replace("\n ", "\n")); //.replace("\n ", "\n")); officeAddress.setPostalCode(config.getProperty( "orga.address.office.code")); officeAddress.setCity(config.getProperty( "orga.address.office.city")); officeAddress.setState(config.getProperty( "orga.address.office.state")); officeAddress.setIsoCountryCode(config.getProperty( "orga.address.office.country")); officeAddress.setContentSection(section); officeAddress.setLanguage("de"); officeAddress.save(); ContentBundle bundle = new ContentBundle(officeAddress); organization.addItem(bundle); Contact contact = new Contact(); contact.setName(config.getProperty( "orga.address.office.name")); contact.setTitle(config.getProperty( "orga.address.office.title")); contact.setAddress(officeAddress); contact.setLanguage("de"); contact.setContentSection(section); contact.save(); bundle = new ContentBundle(contact); organization.addItem(bundle); orgaDe.addContact(contact, "officeAddress"); orgaDe.save(); orgaEn.addContact(contact, "officeAddress"); orgaEn.save(); orgaDe.setContentSection(section); orgaEn.setContentSection(section); orga.setContentSection(section); } } }; transaction.run(); System.out.println("OK"); System.out.println( "\nImporting persons (members) from DaBIn into CCM..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT person.Person_Id, Anrede, Vorname, Name, Angaben " + "FROM person " + "WHERE Eigenschaft = 'Aktiv' OR Eigenschaft = 'Ehemalig' " + "ORDER BY Name, Vorname"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d:", counter, number); PersonData data = new PersonData(); data.setDabinId(result.getString("person.Person_Id")); data.setTitlePre(result.getString("Anrede")); data.setGivenname(result.getString("Vorname")); data.setSurname(result.getString("Name")); data.setContactData(result.getString("Angaben")); createPerson(data, PersonType.MEMBER); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.printf( "Importing persons (cooperatives) from DaBIn into CCM...\n"); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT DISTINCT person.Person_Id, Anrede, Vorname, Name, Angaben " + "FROM person JOIN projektlink on person.Person_Id = projektlink.Person_Id " + "WHERE Eigenschaft = 'Autor' OR Eigenschaft = 'Sonstiges' " + "ORDER BY Name, Vorname"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d:", counter, number); PersonData data = new PersonData(); data.setDabinId(result.getString("person.Person_Id")); data.setTitlePre(result.getString("Anrede")); data.setGivenname(result.getString("Vorname")); data.setSurname(result.getString("Name")); data.setContactData(result.getString("Angaben")); createPerson(data, PersonType.OTHER); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("FINSHED"); System.out.printf("Importing persons (authors) from DaBIn into CCM...\n"); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT DISTINCT person.Person_Id, Anrede, Vorname, Name, Angaben " + "FROM person " + "WHERE Eigenschaft = 'Autor' AND NOT EXISTS (SELECT * FROM projektlink where projektlink.Person_Id = person.Person_Id)" + "ORDER BY Name, Vorname"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d:", counter, number); PersonData data = new PersonData(); data.setDabinId(result.getString("person.Person_Id")); data.setTitlePre(result.getString("Anrede")); data.setGivenname(result.getString("Vorname")); data.setSurname(result.getString("Name")); data.setContactData(result.getString("Angaben")); createPerson(data, PersonType.AUTHOR); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Adding active associated members to organization..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT DISTINCT abteilunglink.Auftrag, person.Person_Id, person.Eigenschaft, abteilunglink.Auftrag " + "FROM abteilunglink JOIN person ON abteilunglink.Person_Id = person.Person_Id " + "WHERE abteilunglink.Abteilung_Id = 11 AND person.Eigenschaft = 'Aktiv'"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("\t%d of %d ", counter, number); if (personsMap.containsKey(result.getString("person.Person_Id"))) { System.out.printf("%s...", ((GenericPerson) personsMap.get(result. getString( "person.Person_Id")). getPrimaryInstance()).getTitle()); orgaDe.addPerson((GenericPerson) personsMap.get(result. getString( "person.Person_Id")).getInstance("de"), "member", "associated"); orgaEn.addPerson((GenericPerson) personsMap.get(result. getString( "person.Person_Id")).getInstance("en"), "member", "associated"); System.out.println("OK"); counter++; } else { System.out.printf("... No value of DaBIn person ID ' '\n", result.getString("person.PersonId")); } } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Adding former associated members to organization..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT DISTINCT abteilunglink.Auftrag, person.Person_Id, person.Eigenschaft, abteilunglink.Auftrag " + "FROM abteilunglink JOIN person ON abteilunglink.Person_Id = person.Person_Id " + "WHERE abteilunglink.Abteilung_Id = 11 AND person.Eigenschaft = 'Ehemalig'"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("\t%d of %d ", counter, number); if (personsMap.containsKey(result.getString("person.Person_Id"))) { System.out.printf("%s...", ((GenericPerson) personsMap.get(result. getString( "person.Person_Id")). getPrimaryInstance()).getTitle()); orgaDe.addPerson((GenericPerson) personsMap.get(result. getString( "person.Person_Id")).getInstance("de"), "member", "associatedFormer"); orgaEn.addPerson((GenericPerson) personsMap.get(result. getString( "person.Person_Id")).getInstance("en"), "member", "associatedFormer"); System.out.println("OK"); } else { System.out.printf("... No value of DaBIn person ID ' '\n", result.getString("person.PersonId")); } counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("FINISHED"); System.out.println("\nImporting departments from DaBIn into CCM..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; List departmentIds = new ArrayList(); result = stmt.executeQuery("SELECT DISTINCT Abteilung_Id " + "FROM abteilung " + "WHERE Abteilung_Id <> 11 " + "ORDER BY Abteilung_Id"); while (result.next()) { departmentIds.add(result.getString(1)); } for (int i = 0; i < departmentIds.size(); i++) { DepartmentData data = new DepartmentData(); System.out.printf("%2d of %2d:\n", i + 1, departmentIds.size()); result = stmt.executeQuery(String.format( "SELECT Name " + "FROM abteilung " + "WHERE Abteilung_Id = %s AND Sprache = 'DE'", departmentIds.get(i))); if (result.next()) { data.setNameDe(result.getString(1)); } result = stmt.executeQuery(String.format( "SELECT Name " + "FROM abteilung " + "WHERE Abteilung_Id = %s AND Sprache = 'EN'", departmentIds.get(i))); if (result.next()) { data.setNameEn(result.getString(1)); } result = stmt.executeQuery(String.format( "SELECT abteilunglink.Auftrag, person.Person_Id, person.Eigenschaft " + "FROM abteilunglink JOIN person ON abteilunglink.Person_Id = person.Person_Id " + "WHERE abteilunglink.Abteilung_Id = %s AND (person.Eigenschaft = 'Aktiv' OR person.Eigenschaft = 'Ehemalig')", departmentIds.get(i))); while (result.next()) { MembershipData membership; membership = new MembershipData(); membership.setPersonDaBInId(result.getString( "person.Person_Id")); membership.setEigenschaft(result.getString( "person.Eigenschaft")); membership.setAuftrag(result.getString( "abteilunglink.Auftrag")); data.addMember(membership); } data.setDabinId(departmentIds.get(i)); createDepartment(data); } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Importing projects..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; List projectsIds = new ArrayList(); result = stmt.executeQuery("SELECT DISTINCT Projekt_Id " + "FROM projekt " + "ORDER BY Projekt_Id"); while (result.next()) { projectsIds.add(result.getString(1)); } for (int i = 0; i < projectsIds.size(); i++) { ProjectData data = new ProjectData(); System.out.printf("%3d of %3d:\n", i + 1, projectsIds.size()); result = stmt.executeQuery(String.format( "SELECT Name, Beschreibung, Finanzierung, Abteilung_Id, Beginn, Ende " + "FROM projekt " + "WHERE Projekt_Id = %s AND Sprache = 'DE'", projectsIds.get(i))); if (result.next()) { data.setNameDe(result.getString("Name")); data.setDescDe(result.getString("Beschreibung")); data.setFundingDe(result.getString("Finanzierung")); data.setDepartment(result.getString("Abteilung_Id")); if (result.getInt("Beginn") != 0) { data.setBegin(new GregorianCalendar(result.getInt( "Beginn"), 0, 1, 0, 0)); } if (result.getInt("Ende") != 0) { data.setEnd(new GregorianCalendar(result.getInt("Ende"), 11, 31, 23, 59)); } } result = stmt.executeQuery(String.format( "SELECT Name, Beschreibung, Finanzierung, Abteilung_Id, Beginn, Ende " + "FROM projekt " + "WHERE Projekt_Id = %s AND Sprache = 'EN'", projectsIds.get(i))); if (result.next()) { data.setNameEn(result.getString("Name")); data.setDescEn(result.getString("Beschreibung")); data.setFundingEn(result.getString("Finanzierung")); data.setDepartment(result.getString("Abteilung_Id")); if (result.getInt("Beginn") != 0) { data.setBegin(new GregorianCalendar(result.getInt( "Beginn"), 0, 1, 0, 0)); } if (result.getInt("Ende") != 0) { data.setEnd(new GregorianCalendar(result.getInt("Ende"), 11, 31, 23, 59)); } } result = stmt.executeQuery(String.format( "SELECT Auftrag, Person_Id " + "FROM projektlink " + "WHERE Projekt_Id = %s", projectsIds.get(i))); while (result.next()) { MembershipData membership; membership = new MembershipData(); membership.setPersonDaBInId(result.getString("Person_Id")); membership.setAuftrag(result.getString("Auftrag")); data.addMember(membership); } data.setDabinId(projectsIds.get(i)); createProject(data); } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("\nImporting publications from DaBIn into CCM..."); System.out.println("Publishers..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery("SELECT Verlag FROM publikation " + "WHERE Typ = 'Monographie' OR Typ = 'Sammelband' OR Typ = 'Artikel / Aufsatz' " + "GROUP BY Verlag"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("\t%d of %d... ", counter, number); if ((result.getString(1) == null) || (result.getString(1).isEmpty())) { System.out.println("Publisher field is empty. Skiping."); } else { PublisherData publisherData = extractPublisher(result. getString( 1)); createPublisher(publisherData); } counter++; } System.out.printf("Found %d unique publishers.\n", publishersMap. size()); } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Monographies..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Statement stmt2 = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT Publikation_Id, Name, Verlag, Jahr, Link, Beschreibung, Abteilung_Id, Sichtbarkeit, ErschienenIn " + "FROM publikation " + "WHERE Typ = 'Monographie' " + "ORDER BY Name"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("Name")); PublicationData data = new PublicationData(); data.setType(PublicationType.MONOGRAPH); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); data.setJahr(result.getString("Jahr")); data.setLink(result.getString("Link")); data.setBeschreibung(result.getString("Beschreibung")); data.setErschienenIn(result.getString("ErschienenIn")); data.setAbteilungId(result.getString("Abteilung_Id")); if ("Abteilung".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.DEPARTMENT); } else if ("Persönlich".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.PRIVATE); } else { data.setVisiblity(PublicationVisibility.GLOBAL); } ResultSet authorResult = stmt2.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM publikationlink " + "WHERE Publikation_Id = %s " + "ORDER BY Reihenfolge", data.getPublicationDaBInId())); while (authorResult.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(authorResult.getString( "Person_Id")); authorship.setBeteiligung(authorResult.getString( "Beteiligung")); data.addAuthor(authorship); } createPublication(data); counter++; } } catch (SQLException ex) { System.err.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.err.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Collected volumes..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Statement stmt2 = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT Publikation_Id, Name, Verlag, Jahr, Link, Beschreibung, Abteilung_Id, Sichtbarkeit " + "FROM publikation " + "WHERE (Typ = 'Sammelband' AND (ErschienenIn IS NULL OR CHAR_LENGTH(ErschienenIn) = 0)) " + "ORDER BY Name"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("Name")); PublicationData data = new PublicationData(); data.setType(PublicationType.COLLECTED_VOLUME); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); data.setJahr(result.getString("Jahr")); data.setLink(result.getString("Link")); data.setBeschreibung(result.getString("Beschreibung")); data.setAbteilungId(result.getString("Abteilung_Id")); if ("Abteilung".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.DEPARTMENT); } else if ("Persönlich".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.PRIVATE); } else { data.setVisiblity(PublicationVisibility.GLOBAL); } ResultSet authorResult = stmt2.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM publikationlink " + "WHERE Publikation_Id = %s " + "ORDER BY Reihenfolge", data.getPublicationDaBInId())); while (authorResult.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(authorResult.getString( "Person_Id")); authorship.setBeteiligung(authorResult.getString( "Beteiligung")); data.addAuthor(authorship); } createPublication(data); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Articles in collected volumes..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Statement stmt2 = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT Publikation_Id, Name, Verlag, Jahr, Link, Beschreibung, Abteilung_Id, Sichtbarkeit, ErschienenIn " + "FROM publikation " + "WHERE (Typ = 'Sammelband' AND ErschienenIn IS NOT NULL AND CHAR_LENGTH(ErschienenIn) > 0) " + "OR (Typ = 'Monograph' AND ErschienenIn IS NOT NULL AND CHAR_LENGTH(ErschienenIn) > 0) " + "OR (Typ = 'Artikel / Aufsatz' AND SUBSTRING(ErschienenIn, 1, 2) = 'in') " + "ORDER BY Name"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("name")); PublicationData data = new PublicationData(); data.setType(PublicationType.ARTICLE_IN_COLLECTED_VOLUME); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); data.setJahr(result.getString("Jahr")); data.setLink(result.getString("Link")); data.setBeschreibung(result.getString("Beschreibung")); data.setErschienenIn(result.getString("ErschienenIn")); data.setAbteilungId(result.getString("Abteilung_Id")); if ("Abteilung".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.DEPARTMENT); } else if ("Persönlich".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.PRIVATE); } else { data.setVisiblity(PublicationVisibility.GLOBAL); } extractPages(result.getString("Verlag"), data); ResultSet authorResult = stmt2.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM publikationlink " + "WHERE Publikation_Id = %s " + "ORDER BY Reihenfolge", data.getPublicationDaBInId())); while (authorResult.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(authorResult.getString( "Person_Id")); authorship.setBeteiligung(authorResult.getString( "Beteiligung")); data.addAuthor(authorship); } createPublication(data); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Articles in journals..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Statement stmt2 = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT Publikation_Id, Name, Verlag, Jahr, Link, Beschreibung, Abteilung_Id, Sichtbarkeit, ErschienenIn " + "FROM publikation " + "WHERE (Typ = 'Artikel / Aufsatz' AND SUBSTRING(ErschienenIn, 1, 2) <> 'in') " + "ORDER BY Name"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("name")); PublicationData data = new PublicationData(); data.setType(PublicationType.ARTICLE_IN_JOURNAL); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); data.setJahr(result.getString("Jahr")); data.setLink(result.getString("Link")); data.setBeschreibung(result.getString("Beschreibung")); data.setErschienenIn(result.getString("ErschienenIn")); data.setAbteilungId(result.getString("Abteilung_Id")); if ("Abteilung".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.DEPARTMENT); } else if ("Persönlich".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.PRIVATE); } else { data.setVisiblity(PublicationVisibility.GLOBAL); } extractPages(result.getString("Verlag"), data); ResultSet authorResult = stmt2.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM publikationlink " + "WHERE Publikation_Id = %s " + "ORDER BY Reihenfolge", data.getPublicationDaBInId())); while (authorResult.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(authorResult.getString( "Person_Id")); authorship.setBeteiligung(authorResult.getString( "Beteiligung")); data.addAuthor(authorship); } createPublication(data); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Anything else (grey literature)..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Statement stmt2 = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; long counter = 1; long number; result = stmt.executeQuery( "SELECT Publikation_Id, Name, Verlag, Jahr, Link, Beschreibung, Abteilung_Id, Sichtbarkeit, ErschienenIn " + "FROM publikation " + "WHERE Typ = 'Sonstiges' " + "ORDER BY Name"); result.last(); number = result.getRow(); result.beforeFirst(); while (result.next()) { System.out.printf("%4d of %4d: %s...\n", counter, number, result. getString("name")); PublicationData data = new PublicationData(); data.setType(PublicationType.GREY_LITERATURE); data.setPublicationDaBInId(result.getString("Publikation_Id")); data.setName(result.getString("Name")); data.setVerlag(result.getString("Verlag")); data.setJahr(result.getString("Jahr")); data.setLink(result.getString("Link")); data.setBeschreibung(result.getString("Beschreibung")); data.setErschienenIn(result.getString("ErschienenIn")); data.setAbteilungId(result.getString("Abteilung_Id")); if ("Abteilung".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.DEPARTMENT); } else if ("Persönlich".equals(result.getString( "Sichtbarkeit"))) { data.setVisiblity(PublicationVisibility.PRIVATE); } else { data.setVisiblity(PublicationVisibility.GLOBAL); } ResultSet authorResult = stmt2.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM publikationlink " + "WHERE Publikation_Id = %s " + "ORDER BY Reihenfolge", data.getPublicationDaBInId())); while (authorResult.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(authorResult.getString( "Person_Id")); authorship.setBeteiligung(authorResult.getString( "Beteiligung")); data.addAuthor(authorship); } createPublication(data); counter++; } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Working papers..."); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result; List workingPaperIds = new ArrayList(); result = stmt.executeQuery("SELECT DISTINCT Arbeitspapier_Id FROM arbeitspapier " + "ORDER BY Jahr, Name"); while (result.next()) { workingPaperIds.add(result.getString(1)); } for (int i = 0; i < workingPaperIds.size(); i++) { WorkingPaperData data = new WorkingPaperData(); result = stmt.executeQuery(String.format( "SELECT Name, Jahr, Beschreibung, Abkürzung, Datei " + "FROM arbeitspapier " + "WHERE Arbeitspapier_Id = %s AND Sprache = 'DE'", workingPaperIds.get(i))); if (result.next()) { System.out.printf("%3d of %3d: %s...\n", i + 1, workingPaperIds.size(), result.getString("Name")); data.setTitleDe(result.getString("Name")); data.setDescDe(result.getString("Beschreibung")); data.setYear(result.getString("Jahr")); data.setNumber(result.getString("Abkürzung")); if ((result.getBlob("Datei") != null) && (result.getBlob("Datei").length() > 0)) { data.setFile(result.getBlob("Datei").getBytes( 1, (int) result.getBlob("Datei").length())); } } result = stmt.executeQuery(String.format( "SELECT Name, Jahr, Beschreibung, Abkürzung " + "FROM arbeitspapier " + "WHERE Arbeitspapier_Id = %s AND Sprache = 'EN'", workingPaperIds.get(i))); if (result.next()) { data.setTitleEn(result.getString("Name")); data.setDescEn(result.getString("Beschreibung")); data.setYear(result.getString("Jahr")); } result = stmt.executeQuery(String.format( "SELECT Beteiligung, Person_Id " + "FROM arbeitspapierlink " + "WHERE Arbeitspapier_Id = %s " + "ORDER BY Reihenfolge", workingPaperIds.get(i))); while (result.next()) { Authorship authorship; authorship = new Authorship(); authorship.setPersonDaBInId(result.getString("Person_Id")); authorship.setBeteiligung(result.getString("Beteiligung")); data.addAuthor(authorship); } data.setDabinId(workingPaperIds.get(i)); createWorkingPaper(data); } } catch (SQLException ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } catch (Exception ex) { System.out.println("FAILED"); ex.printStackTrace(System.err); } System.out.println("Closing MySQL connection..."); try { connection.close(); } catch (SQLException ex) { System.err.println("Failed to close MySQL connection: "); ex.printStackTrace(System.err); System.exit(-1); } System.out.println("DaBIn importer finished. Check the output for " + "error messages, then check the imported items."); System.exit(0); } private void createPerson(final PersonData personData, final PersonType type) { StringBuilder personTitleBuilder = new StringBuilder(); if ((personData.getTitlePre() != null) && (personData.getTitlePre().length() > 0)) { personTitleBuilder.append(personData.getTitlePre()); personTitleBuilder.append(' '); } personTitleBuilder.append(personData.getGivenname()); personTitleBuilder.append(' '); personTitleBuilder.append(personData.getSurname()); System.out.printf(" Creating new person '%s'...", personTitleBuilder.toString()); Transaction transaction = new Transaction() { @Override public void doRun() { GenericPerson personDe = null; GenericPerson personEn = null; switch (type) { case MEMBER: personDe = new SciMember(); personEn = new SciMember(); break; case AUTHOR: personDe = new SciAuthor(); personEn = new SciAuthor(); break; case OTHER: personDe = new Person(); personEn = new Person(); break; } personDe.setSurname(personData.getSurname()); personDe.setGivenName(personData.getGivenname()); personDe.setTitlePre(personData.getTitlePre()); personDe.save(); personDe.setLanguage("de"); personEn.setSurname(personData.getSurname()); personEn.setGivenName(personData.getGivenname()); personEn.setTitlePre(personData.getTitlePre()); personEn.save(); personEn.setLanguage("en"); ContentBundle person; person = new ContentBundle(personDe); person.addInstance(personEn); //folder.addItem(person); char letter; letter = personData.getSurname().toLowerCase().charAt(0); Map folders = null; switch (type) { case MEMBER: folders = membersAlpha; break; case AUTHOR: folders = authorsAlpha; break; case OTHER: folders = personsAlpha; break; } insertIntoAZFolder(person, letter, folders); StringTokenizer contactData = new StringTokenizer( personData.getContactData(), "\n"); Contact contactDe = new Contact(); Contact contactEn = new Contact(); //System.out.printf("\nmember.name = %s\n", member.getName()); //System.out.printf("\nmember.title = %s\n", member.getTitle()); contactDe.setLanguage("de"); contactDe.setName( String.format("kontakt-%s", personDe.getName())); contactDe.setTitle(String.format("Kontakt %s", personDe.getTitle())); contactDe.setPerson(personDe, "commonContact"); contactEn.setLanguage("en"); contactEn.setName( String.format("kontakt-%s", personEn.getName())); contactEn.setTitle(String.format("Kontakt %s", personEn.getTitle())); contactEn.setPerson(personDe, "commonContact"); String homepage = null; while (contactData.hasMoreTokens()) { String token; String key; String value; token = contactData.nextToken(); if (token.indexOf("=") < 0) { System.err.printf("Warning: Invalid contact entry: '%s'" + "Skiping.", token); continue; } key = token.substring(0, token.indexOf('=')).trim(); value = token.substring(token.indexOf('=') + 1).trim(); if ("Raum_1".equals(key)) { contactDe.addContactEntry( new GenericContactEntry(contactDe, "office", value, "")); contactEn.addContactEntry( new GenericContactEntry(contactEn, "office", value, "")); } else if ("Tel_1".equals(key) && value.startsWith("Fax: ")) { contactDe.addContactEntry(new GenericContactEntry( contactDe, "fax", value.substring(6), "")); contactEn.addContactEntry(new GenericContactEntry( contactEn, "fax", value.substring(6), "")); } else if ("Tel_1".equals(key)) { contactDe.addContactEntry( new GenericContactEntry(contactDe, "phoneOffice", value, "")); contactEn.addContactEntry( new GenericContactEntry(contactEn, "phoneOffice", value, "")); } else if ("eMail_1".equals(key)) { contactDe.addContactEntry( new GenericContactEntry(contactDe, "email", value, "")); contactEn.addContactEntry( new GenericContactEntry(contactEn, "email", value, "")); } else if ("WWW_1".equals(key)) { contactDe.addContactEntry( new GenericContactEntry(contactDe, "homepage", value, "")); contactEn.addContactEntry( new GenericContactEntry(contactEn, "homepage", value, "")); homepage = value; homepage = value; } contactDe.setContentSection(section); contactDe.save(); contactEn.setContentSection(section); contactEn.save(); ContentBundle contactBundle = new ContentBundle(contactDe); contactBundle.addInstance(contactEn); //contacts.addItem(contactBundle); insertIntoAZFolder(contactBundle, personDe.getSurname().charAt(0), contactsAlpha); personDe.save(); if (homepage != null) { RelatedLink homepageLinkDe; homepageLinkDe = new RelatedLink(); homepageLinkDe.setTitle("Persönliche Homepage"); homepageLinkDe.setTargetType(Link.EXTERNAL_LINK); homepageLinkDe.setTargetURI(homepage); homepageLinkDe.setLinkListName(""); homepageLinkDe.setLinkOwner(personDe); homepageLinkDe.save(); RelatedLink homepageLinkEn; homepageLinkEn = new RelatedLink(); homepageLinkEn.setTitle("Personal homepage"); homepageLinkEn.setTargetType(Link.EXTERNAL_LINK); homepageLinkEn.setTargetURI(homepage); homepageLinkEn.setLinkListName(""); homepageLinkEn.setLinkOwner(personDe); homepageLinkEn.save(); } } personsMap.put(personData.getDabinId(), person); } }; transaction.run(); System.out.println("OK"); } private void createDepartment(final DepartmentData departmentData) { Transaction transaction = new Transaction() { @Override protected void doRun() { SciDepartment departmentDe; SciDepartment departmentEn; ContentBundle department; System.out.printf("\tde: %s...", departmentData.getNameDe()); departmentDe = new SciDepartment(); departmentDe.setTitle(departmentData.getNameDe()); departmentDe.setName(departmentData.getNameDe(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase()); departmentDe.setLanguage("de"); departmentDe.setContentSection(section); departmentDe.save(); System.out.println("OK"); System.out.printf("\ten: %s...", departmentData.getNameEn()); departmentEn = new SciDepartment(); departmentEn.setTitle(departmentData.getNameEn()); departmentEn.setName(departmentData.getNameEn(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase()); departmentEn.setLanguage("en"); departmentEn.setContentSection(section); departmentEn.save(); System.out.println("OK"); department = new ContentBundle(departmentDe); department.addInstance(departmentEn); department.setContentSection(section); department.setDefaultLanguage("de"); department.setContentSection(section); department.save(); departments.addItem(department); departmentsMap.put(departmentData.getDabinId(), department); //departmentDe.save(); //departmentEn.save(); //department.save(); System.out.println("\tAssigning members..."); int i = 1; for (MembershipData membership : departmentData.getMembers()) { System.out.printf("\t\t%d of %d: (DaBIn member id: %s)...", i, departmentData.getMembers().size(), membership.getPersonDaBInId()); if (!personsMap.containsKey( membership.getPersonDaBInId())) { System.out.printf("No person for DaBIn id '%s'. " + "Skiping.\n", membership.getPersonDaBInId()); continue; } SciMember member = (SciMember) personsMap.get(membership. getPersonDaBInId()).getPrimaryInstance(); String status; String role; if ("Aktiv".equals(membership.getEigenschaft())) { status = "active"; } else if ("Ehemalig".equals( membership.getEigenschaft())) { status = "former"; } else { status = "UNKNOWN"; } if ("Direktor".equals(membership.getAuftrag())) { role = "head"; } else if ("Mitarbeiter".equals(membership.getAuftrag())) { role = "member"; } else if ("Sekretariat".equals(membership.getAuftrag())) { role = "office"; } else if ("Sprecher".equals(membership.getAuftrag())) { role = "speaker"; } else { role = "member"; } departmentDe.addPerson(member, role, status); departmentEn.addPerson(member, role, status); System.out.println("OK"); i++; } System.out.println("\tOK"); orgaDe.addDepartment(departmentDe); orgaEn.addDepartment(departmentEn); departmentsMap.put(departmentData.getDabinId(), department); } }; transaction.run(); System.out.println("FINISHED"); } public void createProject(final ProjectData projectData) { Transaction transaction = new Transaction() { @Override protected void doRun() { SciProject projectDe = null; SciProject projectEn = null; ContentBundle project; System.out.printf("\tde: %s...", projectData.getNameDe()); if ((projectData.getNameDe() != null) && (projectData.getNameDe().length() > 0)) { projectDe = new SciProject(); projectDe.setTitle(projectData.getNameDe()); String projectNameDe = projectData.getNameDe(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase(); if (projectNameDe.length() > 200) { projectNameDe = projectNameDe.substring(0, 200); } projectDe.setName(projectNameDe); projectDe.setProjectDescription(projectData.getDescDe()); projectDe.setFunding(projectData.getFundingDe()); if (projectData.getBegin() != null) { projectDe.setBegin(projectData.getBegin().getTime()); } if (projectData.getEnd() != null) { projectDe.setEnd(projectData.getEnd().getTime()); } projectDe.setLanguage("de"); projectDe.setContentSection(section); projectDe.save(); System.out.println("OK"); } else { System.out.println("No german version. Skiping."); } System.out.printf("\ten: %s...", projectData.getNameEn()); if ((projectData.getNameEn() != null) && (projectData.getNameEn().length() > 0)) { projectEn = new SciProject(); projectEn.setTitle(projectData.getNameEn()); String projectNameEn = projectData.getNameEn(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase(); if (projectNameEn.length() > 200) { projectNameEn = projectNameEn.substring(0, 200); } projectEn.setName(projectNameEn); projectEn.setProjectDescription(projectData.getDescEn()); projectEn.setFunding(projectData.getFundingEn()); if (projectData.getBegin() != null) { projectEn.setBegin(projectData.getBegin().getTime()); } if (projectData.getEnd() != null) { projectEn.setEnd(projectData.getEnd().getTime()); } projectEn.setLanguage("en"); projectEn.setContentSection(section); projectEn.save(); System.out.println("OK"); } else { System.out.println("No english version. Skiping."); } if (projectDe == null) { project = new ContentBundle(projectEn); } else { project = new ContentBundle(projectDe); if (projectEn != null) { project.addInstance(projectEn); } } project.setContentSection(section); project.save(); //projects.addItem(project); projectsMap.put(projectData.getDabinId(), project); System.out.print("\tAssigning project to department... "); ContentBundle department = departmentsMap.get(projectData. getDepartment()); if (department == null) { System.out.printf("No department found for DaBIn id '%s'. " + "Assinging project to organization...", projectData.getDabinId()); if (orgaDe != null) { orgaDe.addProject(projectDe); } if (projectEn != null) { orgaEn.addProject(projectEn); } } else { SciDepartment departmentDe = (SciDepartment) department. getInstance("de"); SciDepartment departmentEn = (SciDepartment) department. getInstance("en"); if (projectDe != null) { departmentDe.addProject(projectDe); } if (projectEn != null) { departmentEn.addProject(projectEn); } } System.out.println("OK"); System.out.println("\tAssigning members..."); int i = 1; for (MembershipData membership : projectData.getMembers()) { System.out.printf("\t\t%d of %d (dabin member id: %s)...", i, projectData.getMembers().size(), membership.getPersonDaBInId()); if (!personsMap.containsKey( membership.getPersonDaBInId())) { System.out.printf("No person for DaBIn id '%s'. " + "Skiping.\n", membership.getPersonDaBInId()); continue; } GenericPerson member = (GenericPerson) personsMap.get(membership. getPersonDaBInId()).getPrimaryInstance(); String role; if ("Projektleitung".equals(membership.getAuftrag())) { role = "head"; } else { role = "member"; } if (projectDe != null) { projectDe.addPerson(member, role, "active"); } if (projectEn != null) { projectEn.addPerson(member, role, "active"); } System.out.println("OK"); i++; } insertIntoAZFolder(project, projectsAlpha); //Assign to term/category Calendar today = new GregorianCalendar(); SciProject sciProject = (SciProject) project. getPrimaryInstance(); if ((sciProject.getEnd() != null) && today.getTime().after(sciProject.getEnd())) { finishedProjectsTerm.addObject(project); } else { currentProjectsTerm.addObject(project); } System.out.println("\tOK"); } }; transaction.run(); System.out.println("FINISHED"); } private void createPublication(final PublicationData publicationData) { Transaction transaction = new Transaction() { @Override protected void doRun() { Publication publicationDe = null; Publication publicationEn = null; ContentBundle publication; switch (publicationData.getType()) { case MONOGRAPH: { Monograph monographDe = null; Monograph monographEn = null; PublisherData publisherData; monographDe = new Monograph(); monographDe.setTitle(publicationData.getName()); monographDe.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, monographDe); publisherData = extractPublisher(publicationData. getVerlag()); if (publishersMap.containsKey(publisherData)) { monographDe.setPublisher((Publisher) publishersMap. get( publisherData).getPrimaryInstance()); } else { System.out.println( "***WARNING: Invalid publisher. Ignoring."); } if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(monographDe); } if (publicationData.getBeschreibung() != null) { monographDe.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { System.out.println( "***WARNING: DaBIn field 'ErschienenIn' contains a value. For publications of type monograph, this is not supported."); } monographDe.save(); monographEn = new Monograph(); monographEn.setTitle(publicationData.getName()); monographEn.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, monographEn); publisherData = extractPublisher(publicationData. getVerlag()); if (publishersMap.containsKey(publisherData)) { monographEn.setPublisher((Publisher) publishersMap. get( publisherData).getPrimaryInstance()); } else { System.out.println( "***WARNING: Invalid publisher. Ignoring."); } if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(monographEn); } if (publicationData.getBeschreibung() != null) { monographEn.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { System.out.println( "***WARNING: DaBIn field 'ErschienenIn' contains a value. For publications of type monograph, this is not supported."); } monographEn.save(); publicationDe = monographDe; publicationEn = monographEn; break; } case COLLECTED_VOLUME: { CollectedVolume collectedVolumeDe; CollectedVolume collectedVolumeEn; PublisherData publisherData; collectedVolumeDe = new CollectedVolume(); collectedVolumeDe.setTitle(publicationData.getName()); collectedVolumeDe.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, collectedVolumeDe); publisherData = extractPublisher(publicationData. getVerlag()); if (publishersMap.containsKey(publisherData)) { collectedVolumeDe.setPublisher((Publisher) publishersMap. get(publisherData).getPrimaryInstance()); } else { System.out.println( "***WARNING: Invalid publisher. Ignoring."); } if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(collectedVolumeDe); } collectedVolumeDe.save(); collectedVolumeEn = new CollectedVolume(); collectedVolumeEn.setTitle(publicationData.getName()); collectedVolumeEn.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, collectedVolumeEn); publisherData = extractPublisher(publicationData. getVerlag()); if (publishersMap.containsKey(publisherData)) { collectedVolumeEn.setPublisher((Publisher) publishersMap. get(publisherData).getPrimaryInstance()); } else { System.out.println( "***WARNING: Invalid publisher. Ignoring."); } if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(collectedVolumeEn); } collectedVolumeEn.save(); publicationDe = collectedVolumeDe; publicationEn = collectedVolumeEn; break; } case ARTICLE_IN_COLLECTED_VOLUME: { ArticleInCollectedVolume articleDe; ArticleInCollectedVolume articleEn; articleDe = new ArticleInCollectedVolume(); articleDe.setTitle(publicationData.getName()); articleDe.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, articleDe); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(articleDe); } if (publicationData.getBeschreibung() != null) { articleDe.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { articleDe.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { articleDe.setPagesFrom( publicationData.getPagesFrom()); articleDe.setPagesTo(publicationData.getPagesTo()); } articleDe.save(); articleEn = new ArticleInCollectedVolume(); articleEn.setTitle(publicationData.getName()); articleEn.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, articleEn); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(articleEn); } if (publicationData.getBeschreibung() != null) { articleEn.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { articleEn.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { articleEn.setPagesFrom( publicationData.getPagesFrom()); articleEn.setPagesTo(publicationData.getPagesTo()); } articleEn.save(); publicationDe = articleDe; publicationEn = articleEn; break; } case ARTICLE_IN_JOURNAL: { ArticleInJournal articleDe; ArticleInJournal articleEn; articleDe = new ArticleInJournal(); articleDe.setTitle(publicationData.getName()); articleDe.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, articleDe); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); if (publicationData.getLink().length() < 200) { link.setTitle(publicationData.getLink()); } else { System.out.println( "\t***WARNING: Link in publication is too long for title. Truncating."); link.setTitle(publicationData.getLink(). substring(0, 200)); } link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(articleDe); } if (publicationData.getBeschreibung() != null) { articleDe.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { articleDe.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { articleDe.setPagesFrom( publicationData.getPagesFrom()); articleDe.setPagesTo(publicationData.getPagesTo()); } articleDe.save(); articleEn = new ArticleInJournal(); articleEn.setTitle(publicationData.getName()); articleEn.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, articleEn); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); if (publicationData.getLink().length() < 200) { link.setTitle(publicationData.getLink()); } else { System.out.println( "\t***WARNING: Link in publication is too long for title. Truncating."); link.setTitle(publicationData.getLink(). substring(0, 200)); } link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(articleEn); } if (publicationData.getBeschreibung() != null) { articleEn.setAbstract(publicationData. getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { articleEn.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { articleEn.setPagesFrom( publicationData.getPagesFrom()); articleEn.setPagesTo(publicationData.getPagesTo()); } articleEn.save(); publicationDe = articleDe; publicationEn = articleEn; break; } case GREY_LITERATURE: { GreyLiterature greyDe; GreyLiterature greyEn; greyDe = new GreyLiterature(); greyDe.setTitle(publicationData.getName()); greyDe.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, greyDe); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(greyDe); } if (publicationData.getBeschreibung() != null) { greyDe.setAbstract(publicationData.getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { greyDe.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { greyDe.setPagesFrom( publicationData.getPagesFrom()); greyDe.setPagesTo(publicationData.getPagesTo()); } greyDe.save(); greyEn = new GreyLiterature(); greyEn.setTitle(publicationData.getName()); greyEn.setName(publicationData.getUrl()); extractYearOfPublication(publicationData, greyEn); if ((publicationData.getLink() != null) && !publicationData.getLink().isEmpty()) { RelatedLink link = new RelatedLink(); link.setTitle(publicationData.getLink()); link.setTargetType(Link.EXTERNAL_LINK); link.setTargetURI(publicationData.getLink()); link.setLinkOwner(greyEn); } if (publicationData.getBeschreibung() != null) { greyEn.setAbstract(publicationData.getBeschreibung()); } if ((publicationData.getErschienenIn() != null) && !publicationData.getErschienenIn().isEmpty()) { greyEn.setMisc(publicationData.getErschienenIn()); } if (publicationData.getPagesFrom() != 0) { greyEn.setPagesFrom( publicationData.getPagesFrom()); greyEn.setPagesTo(publicationData.getPagesTo()); } greyEn.save(); publicationDe = greyDe; publicationEn = greyEn; break; } } publicationDe.setLanguage("de"); publicationEn.setLanguage("en"); System.out.println("\tAssigning authors...\n"); int i = 1; for (Authorship authorship : publicationData.getAuthors()) { System.out.printf("\t\t%d of %d (dabin person id: %s)...", i, publicationData.getAuthors().size(), authorship.getPersonDaBInId()); if (!personsMap.containsKey(authorship.getPersonDaBInId())) { System.out.printf("No person for DaBIn id '%s'. " + "Skiping.\n", authorship.getPersonDaBInId()); continue; } GenericPerson author = (GenericPerson) personsMap.get(authorship. getPersonDaBInId()).getPrimaryInstance(); if ("Herausgeber".equals(authorship.getBeteiligung())) { publicationDe.addAuthor(author, true); publicationEn.addAuthor(author, true); } else { publicationDe.addAuthor(author, false); publicationEn.addAuthor(author, true); } RelatedLink myPublication; myPublication = new RelatedLink(); myPublication.setLinkOwner((GenericPerson) personsMap.get(authorship. getPersonDaBInId()).getInstance("de")); myPublication.setTargetType(Link.INTERNAL_LINK); myPublication.setTargetItem(publicationDe); if (publicationDe.getTitle().length() < 200) { myPublication.setTitle(publicationDe.getTitle()); } else { System.out.println( "\t***WARNING: Publication title is too long for link title. Trancating."); myPublication.setTitle(publicationDe.getTitle(). substring(0, 200)); } myPublication.setLinkListName("MyPublications"); myPublication.save(); myPublication = new RelatedLink(); myPublication.setLinkOwner((GenericPerson) personsMap.get(authorship. getPersonDaBInId()).getInstance("en")); myPublication.setTargetType(Link.INTERNAL_LINK); myPublication.setTargetItem(publicationEn); if (publicationEn.getTitle().length() < 180) { myPublication.setTitle(publicationEn.getTitle()); } else { System.out.println( "\t***WARNING: Publication title is too long for link title. Truncating."); myPublication.setTitle(publicationEn.getTitle(). substring(0, 180)); } myPublication.setLinkListName("MyPublications"); myPublication.save(); System.out.println("OK"); } if (publicationDe == null) { publication = new ContentBundle(publicationEn); publication.setDefaultLanguage("en"); } else { publication = new ContentBundle(publicationDe); publication = new ContentBundle(publicationDe); publication.setDefaultLanguage("de"); } publication.setContentSection(section); //publications.addItem(publication); if ((publicationData.getAbteilungId() != null) && !publicationData.getAbteilungId().isEmpty() && departmentsMap.containsKey( publicationData.getAbteilungId())) { System.out.println( "\tAssigning publication to department...\n"); ContentBundle department = departmentsMap.get(publicationData. getAbteilungId()); ItemCollection instances = department.getInstances(); while (instances.next()) { RelatedLink pubLink; pubLink = new RelatedLink(); pubLink.setLinkListName("SciDepartmentPublications"); if (((Publication) publication.getPrimaryInstance()). getTitle().length() < 180) { pubLink.setTitle(((Publication) publication. getPrimaryInstance()).getTitle()); } else { System.out.println( "\t***WARNING: Title of publication too long for link title. Truncating."); pubLink.setTitle(((Publication) publication. getPrimaryInstance()).getTitle(). substring(0, 180)); } pubLink.setTargetType(Link.INTERNAL_LINK); pubLink.setTargetItem(publication); pubLink.setLinkOwner(instances.getContentItem()); pubLink.save(); } } insertIntoAZFolder(publication, publicationsAlpha); Term term = publicationTerms.get(Integer.toString(((Publication) publication. getPrimaryInstance()). getYearOfPublication())); if (term == null) { term = publicationsTerm; } term.addObject(publication); } }; transaction.run(); System.out.println("FINISHED"); } private void createWorkingPaper(final WorkingPaperData workingPaperData) { Transaction transaction = new Transaction() { @Override protected void doRun() { WorkingPaper workingPaperDe = null; WorkingPaper workingPaperEn = null; ContentBundle workingPaper; if ((workingPaperData.getTitleDe() != null) && !(workingPaperData.getTitleDe().isEmpty())) { System.out.printf("\tde: %s (%s)...", workingPaperData.getTitleDe(), workingPaperData.getYear()); workingPaperDe = new WorkingPaper(); workingPaperDe.setTitle(workingPaperData.getTitleDe()); String workingPaperNameDe = workingPaperData.getTitleDe(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase(); if (workingPaperNameDe.length() > 200) { workingPaperNameDe = workingPaperNameDe.substring(0, 200); } workingPaperDe.setName(workingPaperNameDe); if (workingPaperData.getDescDe().length() > 8000) { workingPaperDe.setAbstract(workingPaperData.getDescDe(). substring(0, 8000)); } else { workingPaperDe.setAbstract(workingPaperData.getDescDe()); } workingPaperDe.setNumber(workingPaperData.getNumber()); workingPaperDe.setOrganization(orgaDe); workingPaperDe.setPlace("Bremen"); extractYearOfPublication(workingPaperData, workingPaperDe); workingPaperDe.setLanguage("de"); workingPaperDe.setContentSection(section); workingPaperDe.save(); System.out.println("OK"); } else { System.out.println("No german version. Skiping."); } if ((workingPaperData.getTitleEn() != null) && !(workingPaperData.getTitleEn().isEmpty())) { System.out.printf("\tEn: %s (%s)...", workingPaperData.getTitleEn(), workingPaperData.getYear()); workingPaperEn = new WorkingPaper(); workingPaperEn.setTitle(workingPaperData.getTitleEn()); String workingPaperNameEn = workingPaperData.getTitleEn(). replace(",", ""). replace("/", ""). replaceAll("\\s\\s+", " "). replace(' ', '-').toLowerCase(); if (workingPaperNameEn.length() > 200) { workingPaperNameEn = workingPaperNameEn.substring(0, 200); } workingPaperEn.setName(workingPaperNameEn); if (workingPaperData.getDescEn().length() > 4096) { System.out.println( "***Warning: Value of DaBIn field abstract too long for abstracts (max: 4096 characters). Truncating."); workingPaperEn.setAbstract(workingPaperData.getDescEn(). substring(0, 4095)); } else { workingPaperEn.setAbstract(workingPaperData.getDescEn()); } workingPaperEn.setNumber(workingPaperData.getNumber()); workingPaperEn.setOrganization(orgaEn); workingPaperEn.setPlace("Bremen"); extractYearOfPublication(workingPaperData, workingPaperEn); workingPaperEn.setLanguage("En"); workingPaperEn.setContentSection(section); workingPaperEn.save(); System.out.println("OK"); } else { System.out.println("No english version. Skiping."); } if (workingPaperDe == null) { workingPaper = new ContentBundle(workingPaperEn); } else { workingPaper = new ContentBundle(workingPaperDe); if (workingPaperEn != null) { workingPaper.addInstance(workingPaperEn); } } workingPaper.setContentSection(section); //publications.addItem(workingPaper); workingPaperMap.put(workingPaperData.getDabinId(), workingPaper); insertIntoAZFolder(workingPaper, publicationsAlpha); Term term = workingPaperTerms.get(Integer.toString(((Publication) workingPaper. getPrimaryInstance()). getYearOfPublication())); if (term == null) { term = workingPapersTerm; } term.addObject(workingPaper); System.out.println("\tOK"); System.out.print("\tAssigning file..."); if (workingPaperData.getFile() == null) { System.out.println("No file found."); } else { try { File tmpFile = File.createTempFile( "ccm_workingpaperCompressed", ".zip"); FileOutputStream tmpFileStream = new FileOutputStream(tmpFile); byte buf[] = new Base64().decode(workingPaperData. getFile()); tmpFileStream.write(buf); tmpFileStream.close(); ZipFile zipFile = new ZipFile(tmpFile); Enumeration entries = zipFile. entries(); if (entries.hasMoreElements()) { InputStream unzip = zipFile.getInputStream(entries. nextElement()); File pdf = File.createTempFile("ccm_workingPaper", ".pdf"); FileOutputStream pdfFileStream = new FileOutputStream( pdf); int b; while ((b = unzip.read()) != -1) { pdfFileStream.write(b); } unzip.close(); pdfFileStream.close(); FileStorageItem fsi = new FileStorageItem(); String title = String.format("Datei %s", ((WorkingPaper) workingPaper. getPrimaryInstance()). getTitle()); if (title.length() > 200) { fsi.setTitle(title.substring(0, 199)); } else { fsi.setTitle(title); } String name = String.format("datei_%s", ((WorkingPaper) workingPaper. getPrimaryInstance()). getName()); if (name.length() > 200) { fsi.setName(name.substring(0, 199)); } else { fsi.setName(name); } FileAsset file = new FileAsset(); file.loadFromFile(workingPaper.getPrimaryInstance(). getName(), pdf, "application/octet-stream"); file.setContentSection(section); fsi.setContentSection(section); fsi.setLanguage("de"); ContentBundle bundle = new ContentBundle(fsi); bundle.setContentSection(section); bundle.setDefaultLanguage("de"); //files.addItem(bundle); RelatedLink download = new RelatedLink(); download.setTitle("download"); download.setTargetType(Link.INTERNAL_LINK); download.setTargetItem(fsi); download.setLinkOwner(workingPaperDe); download = new RelatedLink(); download.setTitle("download"); download.setTargetType(Link.INTERNAL_LINK); download.setTargetItem(fsi); download.setLinkOwner(workingPaperEn); char letter = workingPaperDe.getName().toLowerCase(). charAt(0); insertIntoAZFolder(bundle, letter, filesAlpha); } } catch (IOException ex) { System.out.println( "\n***ERROR: Failed to copy file from DaBIn to CCM: "); ex.printStackTrace(System.out); } } System.out.print("\tAssigning authors to working paper...\n"); int i = 1; for (Authorship authorship : workingPaperData.getAuthors()) { System.out.printf("\t\t%d of %d (dabin person id: %s)...", i, workingPaperData.getAuthors().size(), authorship.getPersonDaBInId()); if (!personsMap.containsKey(authorship.getPersonDaBInId())) { System.out.printf("No person for DaBIn id '%s'. " + "Skiping.\n", authorship.getPersonDaBInId()); continue; } GenericPerson author = (GenericPerson) personsMap.get(authorship. getPersonDaBInId()).getPrimaryInstance(); if (workingPaperDe != null) { if ("Herausgeber".equals(authorship.getBeteiligung())) { workingPaperDe.addAuthor(author, true); } else { workingPaperDe.addAuthor(author, false); } RelatedLink myPublication; myPublication = new RelatedLink(); myPublication.setLinkOwner((GenericPerson) personsMap. get(authorship.getPersonDaBInId()).getInstance( "de")); myPublication.setTargetType(Link.INTERNAL_LINK); myPublication.setTargetItem(workingPaperDe); if (workingPaperDe.getTitle().length() > 180) { myPublication.setTitle(workingPaperDe.getTitle(). substring(0, 180)); } else { myPublication.setTitle(workingPaperDe.getTitle()); } myPublication.setLinkListName("MyPublications"); myPublication.save(); } if (workingPaperEn != null) { if ("Herausgeber".equals(authorship.getBeteiligung())) { workingPaperEn.addAuthor(author, true); } else { workingPaperEn.addAuthor(author, false); } RelatedLink myPublication; myPublication = new RelatedLink(); myPublication.setLinkOwner((GenericPerson) personsMap. get(authorship.getPersonDaBInId()).getInstance( "en")); myPublication.setTargetType(Link.INTERNAL_LINK); myPublication.setTargetItem(workingPaperEn); if (workingPaperEn.getTitle().length() > 180) { myPublication.setTitle(workingPaperDe.getTitle(). substring(0, 180)); } else { myPublication.setTitle(workingPaperDe.getTitle()); } myPublication.setLinkListName("MyPublications"); myPublication.save(); } System.out.println("\tOK"); i++; } System.out.println("OK"); } }; transaction.run(); System.out.println("FINISHED"); } private void createPublisher(final PublisherData publisherData) { if (publishersMap.containsKey(publisherData)) { System.out.printf( "Publisher '%s: %s' was already exists. Skiping.\n", publisherData.getPlace(), publisherData.getName()); return; } Transaction transaction = new Transaction() { @Override protected void doRun() { Publisher publisherDe; Publisher publisherEn; ContentBundle publisher; System.out.printf("\tde: %s, %s...", publisherData.getName(), publisherData. getPlace()); publisherDe = new Publisher(); publisherDe.setTitle(publisherData.getName()); publisherDe.setName(publisherData.getName().toLowerCase()); publisherDe.setPlace(publisherData.getPlace()); publisherDe.setLanguage("de"); publisherDe.save(); System.out.println("OK"); System.out.printf("\tEn: %s, %s...", publisherData.getName(), publisherData. getPlace()); publisherEn = new Publisher(); publisherEn.setTitle(publisherData.getName()); publisherEn.setName(publisherData.getName().toLowerCase()); publisherEn.setPlace(publisherData.getPlace()); publisherEn.setLanguage("en"); publisherEn.save(); System.out.println("OK"); publisher = new ContentBundle(publisherDe); publisher.addInstance(publisherEn); publisher.setDefaultLanguage("de"); publisher.setContentSection(section); //publishers.addItem(publisher); insertIntoAZFolder(publisher, publishersAlpha); publishersMap.put(publisherData, publisher); System.out.println("OK"); } }; transaction.run(); System.out.println("FINISHED"); } /** * Get the content section for the entered path, adding "/" prefix and suffix if necessary. * (taken from london.importer) * * @param rawPath the raw path of the content section, e.g. "content". * * @return the content section */ private ContentSection getContentSection(String rawPath) { final StringBuilder path = new StringBuilder(); if (!rawPath.startsWith("/")) { path.append("/"); } path.append(rawPath); if (!rawPath.endsWith("/")) { path.append("/"); } final ContentSection _section = (ContentSection) ContentSection. retrieveApplicationForPath(path.toString()); if (_section == null) { throw new DataObjectNotFoundException("Content section not found with path " + path); } return _section; } private Folder createFolder(final Folder parent, final String name, final String label) { Folder folder; System.out.printf("Creating folder '%s/%s'...", parent.getName(), name); folder = (Folder) parent.getItem(name, true); if (folder == null) { Transaction transaction = new Transaction() { @Override protected void doRun() { Folder newFolder; newFolder = new Folder(); newFolder.setName(name); newFolder.setLabel(label); newFolder.setParent(parent); } }; transaction.run(); folder = (Folder) parent.getItem(name, true); } System.out.println("OK"); return folder; } protected PublisherData extractPublisher(final String data) { PublisherData publisher; String normalizedData; normalizedData = data.replace(',', '.').replace(')', '.').replace('(', '.'); System.out.printf("\tExtracting publisher name and place from: %s...\n", normalizedData); publisher = new PublisherData(); int colonIndex = normalizedData.indexOf(':'); if (colonIndex < 0) { publisher.setName(normalizedData); } else { String name; String place; int prevDelimIndex; int nextDelimIndex; nextDelimIndex = normalizedData.indexOf('.', colonIndex); System.out.printf("\tcolonIndex = %d\n", colonIndex); if (nextDelimIndex < 0) { nextDelimIndex = normalizedData.indexOf(',', colonIndex); } if (nextDelimIndex < 0) { nextDelimIndex = normalizedData.indexOf(':', colonIndex + 1); } System.out.printf("\tnextDelimIndex = %d\n", nextDelimIndex); if (nextDelimIndex < 0) { System.out.println("\tNext delim smaller than 0..."); name = normalizedData.substring(colonIndex); } else { System.out.println("\tNext delim greater than 0..."); name = normalizedData.substring(colonIndex + 1, nextDelimIndex); } prevDelimIndex = normalizedData.lastIndexOf('.', colonIndex); if (prevDelimIndex < 0) { prevDelimIndex = normalizedData.lastIndexOf(')', colonIndex); } if (prevDelimIndex < 0) { prevDelimIndex = 0; } else { prevDelimIndex++; } System.out.printf("\tprevDelimIndex = %d\n", prevDelimIndex); place = normalizedData.substring(prevDelimIndex, colonIndex); publisher.setName(name.trim()); publisher.setPlace(place.trim()); } System.out.printf("\tExtracted:\n\tName: %s\n\tPlace: %s\n", publisher.getName(), publisher.getPlace()); return publisher; } private void extractYearOfPublication(final PublicationData data, final Publication publication) { try { if ((data.getJahr() != null) && (data.getJahr().length() <= 4)) { publication.setYearOfPublication( Integer.parseInt(data.getJahr())); } else if ((data.getJahr() != null) && (data.getJahr().length() > 4)) { publication.setYearOfPublication(Integer.parseInt(data.getJahr(). substring(0, 4))); } } catch (NumberFormatException ex) { System.out.println( "***WARNING: Invalid year of publication: Not a number. Ignoring."); } } private void extractYearOfPublication(final WorkingPaperData data, final Publication publication) { try { if ((data.getYear() != null) && (data.getYear().length() <= 4)) { publication.setYearOfPublication( Integer.parseInt(data.getYear())); } else if ((data.getYear() != null) && (data.getYear().length() > 4)) { publication.setYearOfPublication(Integer.parseInt(data.getYear(). substring(0, 4))); } } catch (NumberFormatException ex) { System.out.println( "***WARNING: Invalid year of publication: Not a number. Ignoring."); } } private void extractPages(final String data, final PublicationData publicationData) { int index; int leftLimit; int rightLimit; String tmp; int pagesFrom; int pagesTo; System.out.printf("Trying to extract pages from '%s'...\n", data); index = data.lastIndexOf('-'); leftLimit = data.lastIndexOf(' ', index); rightLimit = data.indexOf(' ', index); if (leftLimit < 0) { System.out.println( "*** WARNING: Malformed pages. Left limit less than 0. Ignoring."); } if (rightLimit > data.length()) { System.out.println( "*** WARNING: Malformed pages. Right limit greater than length of string. Ignoring."); } if (rightLimit < 0) { System.out.println( "*** WARNING: Malformed pages. Right limit is smaller than 0. Ignoring."); } try { tmp = data.substring(leftLimit + 1, index); pagesFrom = Integer.parseInt(tmp); tmp = data.substring(index + 1, rightLimit); pagesTo = Integer.parseInt(tmp); } catch (NumberFormatException ex) { System.out.println("*** WARNING: Malformed pages. Ignoring."); return; } catch (StringIndexOutOfBoundsException ex) { System.out.println("*** WARNING: Malformed pages. Ignoring."); return; } publicationData.setPagesFrom(pagesFrom); publicationData.setPagesTo(pagesTo); } private void insertIntoAZFolder(final ContentBundle bundle, final Map folders) { Character letter; letter = bundle.getPrimaryInstance().getName().toLowerCase().charAt(0); insertIntoAZFolder(bundle, letter, folders); } private void insertIntoAZFolder(final ContentBundle bundle, final Character letter, final Map folders) { Folder folder; folder = folders.get(letter); if (folder == null) { folder = folders.get('0'); } folder.addItem(bundle); } private Term checkTermPath(final String path) { StringTokenizer pathTokenizer = new StringTokenizer(path, "/"); Term prevTerm = null; Term term = null; while (pathTokenizer.hasMoreTokens()) { String token = pathTokenizer.nextToken(); String[] split; String uniqueId; String name; split = token.split(":"); if (split.length < 2) { System.err.printf( "***ERROR: Malformed path token '%s'. Abborting path check.\n", token); return null; } uniqueId = split[0]; name = split[1]; prevTerm = term; try { term = termsDomain.getTerm(uniqueId); } catch (DataObjectNotFoundException ex) { System.out.printf("Term '%s' does not exist. Creating...\n", token); createTerm(uniqueId, name, termsDomain, prevTerm); } } return term; } private Map checkYearTerms(final Term parent, final List years) { String parentId = parent.getUniqueID(); Map yearTerms = new HashMap(); for (String year : years) { String yearTermId = String.format("%s%s", parentId, year); Term term; try { term = termsDomain.getTerm(yearTermId); } catch (DataObjectNotFoundException ex) { System.out.printf( "Term for year '%s' in term '%s' does not exist. Creating.\n", year, parent.getName()); createTerm(yearTermId, year, termsDomain, parent); term = termsDomain.getTerm(yearTermId); } yearTerms.put(year, term); } return yearTerms; } private void createTerm(final String uniqueId, final String name, final Domain domain, final Term parent) { Transaction transaction = new Transaction() { @Override protected void doRun() { try { Term term = Term.create(uniqueId, name, false, "", domain); term.save(); parent.addNarrowerTerm(term, false, false); //parent.save(); } catch (Exception ex) { ex.printStackTrace(System.err); } } }; transaction.run(); } private List getPublicationYears() { List years = new ArrayList(); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result = stmt.executeQuery( "SELECT Jahr FROM publikation GROUP BY Jahr"); while (result.next()) { String year = result.getString(1); if (year.length() > 4) { years.add(year.substring(0, 4)); } else { years.add(year); } } } catch (SQLException ex) { System.err.println("Query for publication years failed."); ex.printStackTrace(System.err); } return years; } private List getWorkingPaperYears() { List years = new ArrayList(); try { Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result = stmt.executeQuery( "SELECT Jahr FROM arbeitspapier GROUP BY Jahr"); while (result.next()) { while (result.next()) { String year = result.getString(1); if (year.length() > 4) { years.add(year.substring(0, 4)); } else { years.add(year); } } } } catch (SQLException ex) { System.err.println("Query for publication years failed."); ex.printStackTrace(System.err); } return years; } public static void main(String[] args) { new DaBInImporter().run(args); } }