diff --git a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java
index 4c36d4b7c..2c5cad99d 100755
--- a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java
+++ b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java
@@ -181,6 +181,7 @@ public class RelatedLink extends Link {
* Retrieves related links for a given content item
*
* @param item The item to return links for
+ * @param name Name of the link list
*/
public static DataCollection getRelatedLinks(ContentItem item, String name) {
s_log.debug("Getting related links for a content item");
diff --git a/ccm-cms-dabinimporter/application.xml b/ccm-cms-dabinimporter/application.xml
new file mode 100644
index 000000000..429ad4a12
--- /dev/null
+++ b/ccm-cms-dabinimporter/application.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tool to import DaBIn data into OpenCCM
+
+
diff --git a/ccm-cms-dabinimporter/lib/mysql-connector-java-5.1.13-bin.jar b/ccm-cms-dabinimporter/lib/mysql-connector-java-5.1.13-bin.jar
new file mode 100644
index 000000000..ef5d71e70
Binary files /dev/null and b/ccm-cms-dabinimporter/lib/mysql-connector-java-5.1.13-bin.jar differ
diff --git a/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.config b/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.config
new file mode 100644
index 000000000..adfdba100
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.config
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.load b/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.load
new file mode 100644
index 000000000..f5ad0716f
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/ccm-cms-dabinimporter.load
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java
new file mode 100644
index 000000000..8b627436c
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java
@@ -0,0 +1,1331 @@
+/*
+ * 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.Folder;
+import com.arsdigita.cms.contentassets.RelatedLink;
+import com.arsdigita.cms.contenttypes.Address;
+import com.arsdigita.cms.contenttypes.Contact;
+import com.arsdigita.cms.contenttypes.GenericContactEntry;
+import com.arsdigita.cms.contenttypes.Link;
+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.domain.DataObjectNotFoundException;
+import com.arsdigita.london.util.Transaction;
+import com.arsdigita.packaging.Program;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import org.apache.commons.cli.CommandLine;
+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 Folder departments;
+ private Folder members;
+ private Map membersAlpha;
+ private Folder organization;
+ private Folder projects;
+ private Folder publications;
+ private Map authorsMap;
+ private Map departmentsMap;
+ private Map membersMap;
+ private Map projectsMap;
+ private Map publicationMap;
+ private Map workingPaperMap;
+ private SciOrganization orgaDe;
+ private SciOrganization orgaEn;
+ private ContentBundle orga;
+ private Address postalAddress;
+ private Address officeAddress;
+
+ public DaBInImporter() {
+ this(true);
+ /*super("DaBInImporter",
+ "0.1.0",
+ "MySQLHost MySQLUser MySQLPassword MySQLDB OrgaTitle OrgaName contentsection");
+ authorsAlpha = new HashMap(12);
+ membersAlpha = new HashMap(12);
+ authorsMap = new HashMap();
+ departmentsMap = new HashMap();
+ membersMap = new HashMap();
+ projectsMap = new HashMap();
+ publicationMap = new HashMap();*/
+ }
+
+ public DaBInImporter(boolean startup) {
+ /*super("DaBInImporter",
+ "0.1.0",
+ "MySQLHost MySQLUser MySQLPassword MySQLDB OrgaTitle OrgaName contentSection",
+ startup);*/
+ super("DaBInImporter",
+ "0.1.0",
+ "configFile",
+ startup);
+ authorsAlpha = new HashMap(12);
+ membersAlpha = new HashMap(12);
+ authorsMap = new HashMap();
+ departmentsMap = new HashMap();
+ membersMap = new HashMap();
+ projectsMap = new HashMap();
+ publicationMap = new HashMap();
+ workingPaperMap = new HashMap();
+ }
+
+ @Override
+ protected void doRun(CommandLine cmdLine) {
+ final String args[];
+ String mySqlHost;
+ String mySqlUser;
+ String mySqlPassword;
+ String mySqlDb;
+ String orgaTitle;
+ String orgaName;
+
+ System.out.println("");
+ System.out.println("");
+ System.out.println("DaBInImporter starting...");
+
+ //Get command line arguments...
+ args = cmdLine.getArgs();
+
+ /*if (args.length != 7) {
+ logger.error("Invalid number of arguments.");
+ //System.err.println();
+ help(System.err);
+ System.exit(-1);
+ }
+
+ mySqlHost = args[0];
+ mySqlUser = args[1];
+ mySqlPassword = args[2];
+ mySqlDb = args[3];
+ orgaTitle = args[4];
+ orgaName = args[5];
+
+ section = getContentSection(args[6]);*/
+
+ 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, "ab", "A - B");
+ authorsAlpha.put("ab", folder);
+ folder = createFolder(authors, "cd", "C - D");
+ authorsAlpha.put("cd", folder);
+ folder = createFolder(authors, "ef", "E - F");
+ authorsAlpha.put("ef", folder);
+ folder = createFolder(authors, "gh", "G - H");
+ authorsAlpha.put("gh", folder);
+ folder = createFolder(authors, "ij", "I - J");
+ authorsAlpha.put("ij", folder);
+ folder = createFolder(authors, "kl", "K - L");
+ authorsAlpha.put("kl", folder);
+ folder = createFolder(authors, "mn", "M - N");
+ authorsAlpha.put("mn", folder);
+ folder = createFolder(authors, "op", "P - P");
+ authorsAlpha.put("op", folder);
+ folder = createFolder(authors, "qr", "Q - R");
+ authorsAlpha.put("qr", folder);
+ folder = createFolder(authors, "st", "S - T");
+ authorsAlpha.put("st", folder);
+ folder = createFolder(authors, "uv", "U - V");
+ authorsAlpha.put("uv", folder);
+ folder = createFolder(authors, "wxzy", "W - Z");
+ authorsAlpha.put("wxyz", folder);
+
+ contacts = createFolder(root, "kontaktdaten", "Kontaktdaten");
+
+ departments = createFolder(root, "abteilungen", "Abteilungen");
+
+ members = createFolder(root, "mitglieder", "Mitglieder");
+ folder = createFolder(members, "ab", "A - B");
+ membersAlpha.put("ab", folder);
+ folder = createFolder(members, "cd", "C - D");
+ membersAlpha.put("cd", folder);
+ folder = createFolder(members, "ef", "E - F");
+ membersAlpha.put("ef", folder);
+ folder = createFolder(members, "gh", "G - H");
+ membersAlpha.put("gh", folder);
+ folder = createFolder(members, "ij", "I - J");
+ membersAlpha.put("ij", folder);
+ folder = createFolder(members, "kl", "K - L");
+ membersAlpha.put("kl", folder);
+ folder = createFolder(members, "mn", "M - N");
+ membersAlpha.put("mn", folder);
+ folder = createFolder(members, "op", "P - P");
+ membersAlpha.put("op", folder);
+ folder = createFolder(members, "qr", "Q - R");
+ membersAlpha.put("qr", folder);
+ folder = createFolder(members, "st", "S - T");
+ membersAlpha.put("st", folder);
+ folder = createFolder(members, "uv", "U - V");
+ membersAlpha.put("uv", folder);
+ folder = createFolder(members, "wxzy", "W - Z");
+ membersAlpha.put("wxyz", folder);
+
+ organization = createFolder(root, "organisationen", "Organisation(en)");
+
+ projects = createFolder(root, "projekte", "Projekte");
+
+ publications = createFolder(root, "publikationen", "Publications");
+
+ 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 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 "
+ + "JOIN abteilunglink on person.Person_Id = abteilunglink.Person_Id "
+ + "WHERE Eigenschaft = 'Aktiv' AND Abteilung_Id <> 11 "
+ + "GROUP BY person.Person_Id, Vorname, Name ORDER BY Name, Vorname");*/
+ result =
+ stmt.executeQuery(
+ "SELECT person.Person_Id, Anrede, Vorname, Name, Angaben "
+ + "FROM person "
+ + "JOIN abteilunglink ON person.Person_Id = abteilunglink.Person_Id "
+ + "WHERE Eigenschaft = 'Aktiv' OR Eigenschaft = 'Ehemalig' "
+ + "GROUP BY person.Person_Id, Vorname, Name "
+ + "ORDER BY Name, Vorname");
+ result.last();
+ number = result.getRow();
+ result.beforeFirst();
+
+ while (result.next()) {
+ System.out.printf("%4d of %4d:", counter, number);
+ MemberData data = new MemberData();
+ 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"));
+ createMember(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("Adding 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 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 (membersMap.containsKey(result.getString("person.Person_Id"))) {
+ System.out.printf("%s...", membersMap.get(result.getString(
+ "person.Person_Id")).getTitle());
+ orgaDe.addPerson(membersMap.get(result.getString(
+ "person.Person_Id")),
+ "member",
+ "associated");
+ orgaEn.addPerson(membersMap.get(result.getString(
+ "person.Person_Id")),
+ "member",
+ "associated");
+ System.out.println("OK");
+ } 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("FINSHED");
+
+
+ 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 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 (membersMap.containsKey(result.getString("person.Person_Id"))) {
+ System.out.printf("%s...", membersMap.get(result.getString(
+ "person.Person_Id")).getTitle());
+ orgaDe.addPerson(membersMap.get(result.getString(
+ "person.Person_Id")),
+ "member",
+ "associated");
+ orgaEn.addPerson(membersMap.get(result.getString(
+ "person.Person_Id")),
+ "member",
+ "associated");
+ System.out.println("OK");
+ } 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("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 "
+ + "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"));
+ }
+
+ result = stmt.executeQuery(String.format(
+ "SELECT Name, Beschreibung, Finanzierung "
+ + "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"));
+ }
+
+ 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("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);
+ }
+
+ protected void oldDoRun(CommandLine cmdLine) {
+ final String args[];
+ String mySqlHost;
+ String mySqlUser;
+ String mySqlPassword;
+ String mySqlDb;
+ String orgaTitle;
+ String orgaName;
+ ContentSection section;
+
+ //Connection connection = null;
+
+ System.out.println("");
+ System.out.println("");
+ System.out.println("DaBInImporter starting...");
+
+ //Get command line arguments...
+ args = cmdLine.getArgs();
+
+ if (args.length != 7) {
+ logger.error("Invalid number of arguments.");
+ //System.err.println();
+ help(System.err);
+ System.exit(-1);
+ }
+
+ mySqlHost = args[0];
+ mySqlUser = args[1];
+ mySqlPassword = args[2];
+ mySqlDb = args[3];
+ orgaTitle = args[4];
+ orgaName = args[5];
+
+ section = getContentSection(args[6]);
+
+ //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);
+ }
+
+
+ try {
+ Statement stmt = connection.createStatement();
+ long num = 1;
+
+ ResultSet result =
+ stmt.executeQuery(
+ "SELECT Person_Id, Name, Vorname, Anrede, Eigenschaft "
+ + "FROM person "
+ + "WHERE Eigenschaft = 'Aktiv' OR Eigenschaft = 'Ehemalig"
+ + "ORDER BY Name, Vorname, Anrede");
+
+
+ System.out.println("Creating members...");
+ while (result.next()) {
+ System.out.printf("%d: %s, %s, %s, %s, %s\n",
+ num,
+ result.getString("Person_Id"),
+ result.getString("Name"),
+ result.getString("Vorname"),
+ result.getString("Anrede"),
+ result.getString("Eigenschaft"));
+ num++;
+ MemberData memberData = new MemberData();
+ memberData.setDabinId(result.getString("Person_Id"));
+ memberData.setTitlePre(result.getString("Anrede"));
+ memberData.setSurname(result.getString("Name"));
+ memberData.setGivenname(result.getString("Vorname"));
+ //createMember(memberData, section);
+ }
+ } catch (SQLException ex) {
+ System.err.println("Failed to query 'person' table: ");
+ ex.printStackTrace(System.err);
+ } catch (Exception ex) {
+ System.err.println("Failed to create member: ");
+ 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 successfully.");
+ System.exit(0);
+ }
+
+ private void createMember(final MemberData memberData) {
+
+ StringBuilder memberTitleBuilder = new StringBuilder();
+ if ((memberData.getTitlePre() != null)
+ && (memberData.getTitlePre().length() > 0)) {
+ memberTitleBuilder.append(memberData.getTitlePre());
+ memberTitleBuilder.append(' ');
+ }
+ memberTitleBuilder.append(memberData.getGivenname());
+ memberTitleBuilder.append(' ');
+ memberTitleBuilder.append(memberData.getSurname());
+ System.out.printf(" Creating new member '%s'...",
+ memberTitleBuilder.toString());
+
+ final Folder folder;
+ char letter;
+
+ letter = memberData.getSurname().toLowerCase().charAt(0);
+
+ switch (letter) {
+ case 'a':
+ folder = membersAlpha.get("ab");
+ break;
+ case 'b':
+ folder = membersAlpha.get("ab");
+ break;
+ case 'c':
+ folder = membersAlpha.get("cd");
+ break;
+ case 'd':
+ folder = membersAlpha.get("cd");
+ break;
+ case 'e':
+ folder = membersAlpha.get("ef");
+ break;
+ case 'f':
+ folder = membersAlpha.get("ef");
+ break;
+ case 'g':
+ folder = membersAlpha.get("gh");
+ break;
+ case 'h':
+ folder = membersAlpha.get("gh");
+ break;
+ case 'i':
+ folder = membersAlpha.get("ij");
+ break;
+ case 'j':
+ folder = membersAlpha.get("ij");
+ break;
+ case 'k':
+ folder = membersAlpha.get("kl");
+ break;
+ case 'l':
+ folder = membersAlpha.get("kl");
+ break;
+ case 'm':
+ folder = membersAlpha.get("mn");
+ break;
+ case 'n':
+ folder = membersAlpha.get("mn");
+ break;
+ case 'o':
+ folder = membersAlpha.get("op");
+ break;
+ case 'p':
+ folder = membersAlpha.get("op");
+ break;
+ case 'q':
+ folder = membersAlpha.get("qr");
+ break;
+ case 'r':
+ folder = membersAlpha.get("qr");
+ break;
+ case 's':
+ folder = membersAlpha.get("st");
+ break;
+ case 't':
+ folder = membersAlpha.get("st");
+ break;
+ case 'u':
+ folder = membersAlpha.get("uv");
+ break;
+ case 'v':
+ folder = membersAlpha.get("uv");
+ break;
+ case 'w':
+ folder = membersAlpha.get("wxyz");
+ break;
+ case 'x':
+ folder = membersAlpha.get("wxyz");
+ break;
+ case 'y':
+ folder = membersAlpha.get("wxyz");
+ break;
+ case 'z':
+ folder = membersAlpha.get("wxyz");
+ break;
+ case 'ä':
+ folder = membersAlpha.get("ab");
+ break;
+ case 'ö':
+ folder = membersAlpha.get("op");
+ break;
+ case 'ü':
+ folder = membersAlpha.get("uv");
+ break;
+ default:
+ folder = members;
+ break;
+ }
+
+ Transaction transaction = new Transaction() {
+
+ @Override
+ public void doRun() {
+ SciMember member;
+
+ member = new SciMember();
+ member.setSurname(memberData.getSurname());
+ member.setGivenName(memberData.getGivenname());
+ member.setTitlePre(memberData.getTitlePre());
+
+ member.save();
+ member.setLanguage("de");
+
+ ContentBundle bundle;
+ bundle = new ContentBundle(member);
+
+ folder.addItem(bundle);
+
+ StringTokenizer contactData = new StringTokenizer(
+ memberData.getContactData(),
+ "\n");
+ Contact contact = new Contact();
+ //System.out.printf("\nmember.name = %s\n", member.getName());
+ //System.out.printf("\nmember.title = %s\n", member.getTitle());
+ contact.setLanguage("de");
+ contact.setName(String.format("kontakt-%s", member.getName()));
+ contact.setTitle(String.format("Kontakt %s",
+ member.getTitle()));
+ contact.setPerson(member, "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)) {
+ contact.addContactEntry(
+ new GenericContactEntry(contact,
+ "office",
+ value,
+ ""));
+ } else if ("Tel_1".equals(key)
+ && value.startsWith("Fax: ")) {
+ contact.addContactEntry(new GenericContactEntry(
+ contact,
+ "fax",
+ value.substring(6),
+ ""));
+ } else if ("Tel_1".equals(key)) {
+ contact.addContactEntry(
+ new GenericContactEntry(contact,
+ "phoneOffice",
+ value,
+ ""));
+ } else if ("eMail_1".equals(key)) {
+ contact.addContactEntry(
+ new GenericContactEntry(contact,
+ "email",
+ value,
+ ""));
+ } else if ("WWW_1".equals(key)) {
+ contact.addContactEntry(
+ new GenericContactEntry(contact,
+ "homepage",
+ value,
+ ""));
+ homepage = value;
+ }
+
+ contact.setContentSection(section);
+ contact.save();
+ ContentBundle contactBundle = new ContentBundle(contact);
+ contacts.addItem(contactBundle);
+ member.save();
+
+ if (homepage != null) {
+ RelatedLink homepageLink;
+ homepageLink = new RelatedLink();
+ homepageLink.setTitle("Persönliche Homepage");
+ homepageLink.setTargetType(Link.EXTERNAL_LINK);
+ homepageLink.setTargetURI(homepage);
+ homepageLink.setLinkListName("");
+ homepageLink.setLinkOwner(member);
+ homepageLink.save();
+ }
+ }
+
+
+ membersMap.put(memberData.getDabinId(), member);
+ }
+ };
+ transaction.run();
+
+ System.out.println("OK");
+ }
+
+ public 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("Assigning members...");
+ int i = 1;
+ for (MembershipData membership : departmentData.getMembers()) {
+ System.out.printf("\t\t%d of %d...", i, departmentData.
+ getMembers().size());
+ SciMember member = membersMap.get(membership.
+ getPersonDaBInId());
+ String status;
+ String role;
+
+ if (member == null) {
+ System.out.printf(
+ "No member for DaBIn person ID '%s' found. Skiping.\n", membership.
+ getPersonDaBInId());
+ continue;
+ }
+
+ 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("OK");
+
+ 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());
+ projectDe.setLanguage("de");
+ projectDe.setContentSection(section);
+ projectDe.save();
+ System.out.println("OK");
+ } else {
+ System.out.println("No english 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());
+ 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("Assigning 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...");
+ orgaDe.addProject(projectDe);
+ if (projectEn != null) {
+ orgaEn.addProject(projectEn);
+ }
+ } else {
+ SciDepartment departmentDe = (SciDepartment) department.
+ getInstance("de");
+ SciDepartment departmentEn = (SciDepartment) department.
+ getInstance("en");
+
+ departmentDe.addProject(projectDe);
+ if (projectEn != null) {
+ departmentEn.addProject(projectEn);
+ }
+ }
+ System.out.println("OK");
+
+ System.out.println("Assigning members...");
+ int i = 1;
+ for (MembershipData membership : projectData.getMembers()) {
+ System.out.printf("\t\t%d of %d...", i, projectData.
+ getMembers().size());
+ SciMember member = membersMap.get(membership.
+ getPersonDaBInId());
+ String role;
+
+ if (member == null) {
+ System.out.printf(
+ "No member for DaBIn person ID '%s' found. Skiping.\n",
+ membership.getPersonDaBInId());
+ continue;
+ }
+
+ if ("Projektleitung".equals(membership.getAuftrag())) {
+ role = "head";
+ } else {
+ role = "member";
+ }
+
+ projectDe.addPerson(member, role, "active");
+ if (projectEn != null) {
+ projectEn.addPerson(member, role, "active");
+ }
+ System.out.println("OK");
+ i++;
+ }
+
+ 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;
+ }
+
+ public static final void main(String[] args) {
+ new DaBInImporter().run(args);
+ }
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DepartmentData.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DepartmentData.java
new file mode 100644
index 000000000..9a6d5b87d
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DepartmentData.java
@@ -0,0 +1,56 @@
+package com.arsdigita.cms.dabin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class DepartmentData {
+
+ private String dabinId;
+ private String nameDe;
+ private String nameEn;
+ private List members;
+
+ public DepartmentData() {
+ members = new ArrayList();
+ }
+
+ public String getDabinId() {
+ return dabinId;
+ }
+
+ public void setDabinId(String dabinId) {
+ this.dabinId = dabinId;
+ }
+
+ public String getNameDe() {
+ return nameDe;
+ }
+
+ public void setNameDe(String nameDe) {
+ this.nameDe = nameDe;
+ }
+
+ public String getNameEn() {
+ return nameEn;
+ }
+
+ public void setNameEn(String nameEn) {
+ this.nameEn = nameEn;
+ }
+
+ public List getMembers() {
+ return members;
+ }
+
+ public void setMembers(List members) {
+ this.members = members;
+ }
+
+ public void addMember(MembershipData member) {
+ members.add(member);
+ }
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Initializer.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Initializer.java
new file mode 100644
index 000000000..592c34812
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Initializer.java
@@ -0,0 +1,35 @@
+/*
+ * 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.runtime.CompoundInitializer;
+
+/**
+ * Initializer for the ccm-cms-dabinimporter application
+ *
+ * @author Jens Pelzetter
+ */
+public class Initializer extends CompoundInitializer {
+
+ public Initializer() {
+ super();
+ //Nothing more yet
+ }
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Loader.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Loader.java
new file mode 100644
index 000000000..69c1c8d8f
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/Loader.java
@@ -0,0 +1,35 @@
+/*
+ * 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.loader.PackageLoader;
+import com.arsdigita.runtime.ScriptContext;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class Loader extends PackageLoader {
+
+ public void run(final ScriptContext ctx) {
+ //Nothing yet
+ }
+
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MemberData.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MemberData.java
new file mode 100644
index 000000000..d70bbfb7e
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MemberData.java
@@ -0,0 +1,68 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.dabin;
+
+/**
+ *
+ * @author jensp
+ */
+public class MemberData {
+
+ private String dabinId;
+ private String titlePre;
+ private String surname;
+ private String givenname;
+ private String titlePost;
+ private String contactData;
+
+
+ public String getDabinId() {
+ return dabinId;
+ }
+
+ public void setDabinId(String dabinId) {
+ this.dabinId = dabinId;
+ }
+
+ public String getGivenname() {
+ return givenname;
+ }
+
+ public void setGivenname(String givenname) {
+ this.givenname = givenname;
+ }
+
+ public String getSurname() {
+ return surname;
+ }
+
+ public void setSurname(String surname) {
+ this.surname = surname;
+ }
+
+ public String getTitlePost() {
+ return titlePost;
+ }
+
+ public void setTitlePost(String titlePost) {
+ this.titlePost = titlePost;
+ }
+
+ public String getTitlePre() {
+ return titlePre;
+ }
+
+ public void setTitlePre(String titlePre) {
+ this.titlePre = titlePre;
+ }
+
+ public String getContactData() {
+ return contactData;
+ }
+
+ public void setContactData(String contactData) {
+ this.contactData = contactData;
+ }
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MembershipData.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MembershipData.java
new file mode 100644
index 000000000..4aece4c7d
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/MembershipData.java
@@ -0,0 +1,38 @@
+package com.arsdigita.cms.dabin;
+
+/**
+ *
+ * @author jensp
+ */
+public class MembershipData {
+
+ private String personDaBInId;
+ private String eigenschaft;
+ private String auftrag;
+
+ public String getAuftrag() {
+ return auftrag;
+ }
+
+ public void setAuftrag(String auftrag) {
+ this.auftrag = auftrag;
+ }
+
+ public String getEigenschaft() {
+ return eigenschaft;
+ }
+
+ public void setEigenschaft(String eigenschaft) {
+ this.eigenschaft = eigenschaft;
+ }
+
+ public String getPersonDaBInId() {
+ return personDaBInId;
+ }
+
+ public void setPersonDaBInId(String personDaBInId) {
+ this.personDaBInId = personDaBInId;
+ }
+
+
+}
diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/ProjectData.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/ProjectData.java
new file mode 100644
index 000000000..fe2c7ba20
--- /dev/null
+++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/ProjectData.java
@@ -0,0 +1,120 @@
+package com.arsdigita.cms.dabin;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class ProjectData {
+
+ private String dabinId;
+ private String nameDe;
+ private String nameEn;
+ private String department;
+ private List members;
+ private Calendar begin;
+ private Calendar end;
+ private String descDe;
+ private String descEn;
+ private String fundingDe;
+ private String fundingEn;
+
+ public ProjectData() {
+ members = new ArrayList();
+ }
+
+ public Calendar getBegin() {
+ return begin;
+ }
+
+ public void setBegin(Calendar begin) {
+ this.begin = begin;
+ }
+
+ public String getDabinId() {
+ return dabinId;
+ }
+
+ public void setDabinId(String dabinId) {
+ this.dabinId = dabinId;
+ }
+
+ public String getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+
+ public String getDescDe() {
+ return descDe;
+ }
+
+ public void setDescDe(String desc) {
+ this.descDe = desc;
+ }
+
+ public String getDescEn() {
+ return descEn;
+ }
+
+ public void setDescEn(String descEn) {
+ this.descEn = descEn;
+ }
+
+ public Calendar getEnd() {
+ return end;
+ }
+
+ public void setEnd(Calendar end) {
+ this.end = end;
+ }
+
+ public String getFundingDe() {
+ return fundingDe;
+ }
+
+ public void setFundingDe(String funding) {
+ this.fundingDe = funding;
+ }
+
+ public String getFundingEn() {
+ return fundingEn;
+ }
+
+ public void setFundingEn(String fundingEn) {
+ this.fundingEn = fundingEn;
+ }
+
+ public void addMember(MembershipData member) {
+ members.add(member);
+ }
+
+ public List getMembers() {
+ return members;
+ }
+
+ public void setMembers(List members) {
+ this.members = members;
+ }
+
+ public String getNameDe() {
+ return nameDe;
+ }
+
+ public void setNameDe(String nameDe) {
+ this.nameDe = nameDe;
+ }
+
+ public String getNameEn() {
+ return nameEn;
+ }
+
+ public void setNameEn(String nameEn) {
+ this.nameEn = nameEn;
+ }
+}
diff --git a/ccm-cms-relationattributeimporter/src/com/arsdigita/cms/relationattributeimporter/RelationAttributeImporter.java b/ccm-cms-relationattributeimporter/src/com/arsdigita/cms/relationattributeimporter/RelationAttributeImporter.java
index 4d8c44a5f..d98071cc2 100644
--- a/ccm-cms-relationattributeimporter/src/com/arsdigita/cms/relationattributeimporter/RelationAttributeImporter.java
+++ b/ccm-cms-relationattributeimporter/src/com/arsdigita/cms/relationattributeimporter/RelationAttributeImporter.java
@@ -201,7 +201,8 @@ public class RelationAttributeImporter extends Program {
}
};
transaction.run();
- System.out.println("Done\n");
+ System.out.println("Done\n");
+
}
public final static void main(String[] args) {
diff --git a/ccm-cms/pdl/com/arsdigita/content-types/GenericContact.pdl b/ccm-cms/pdl/com/arsdigita/content-types/GenericContact.pdl
index c5e92696e..7fbc60f62 100644
--- a/ccm-cms/pdl/com/arsdigita/content-types/GenericContact.pdl
+++ b/ccm-cms/pdl/com/arsdigita/content-types/GenericContact.pdl
@@ -37,8 +37,8 @@ object type GenericContact extends ContentPage {
object type GenericContactEntry extends ContentItem {
String[1..1] key = cms_contactEntries.key VARCHAR(100);
- String[0..1] description = cms_contactEntries.description VARCHAR(100);
- String[1..1] value = cms_contactEntries.value VARCHAR(100);
+ String[0..1] description = cms_contactEntries.description VARCHAR(200);
+ String[1..1] value = cms_contactEntries.value VARCHAR(200);
reference key ( cms_contactEntries.contactentry_id );
diff --git a/ccm-cms/src/com/arsdigita/cms/RelationAttributeCollection.java b/ccm-cms/src/com/arsdigita/cms/RelationAttributeCollection.java
index 51f7397f3..8c242b2db 100644
--- a/ccm-cms/src/com/arsdigita/cms/RelationAttributeCollection.java
+++ b/ccm-cms/src/com/arsdigita/cms/RelationAttributeCollection.java
@@ -128,8 +128,8 @@ public class RelationAttributeCollection extends DomainCollection {
}
}
- // Nothing found
- return null;
+ // Nothing found
+ return null;
}
public String getName() {
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties
index 547ba47e6..10d492a03 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties
@@ -128,3 +128,7 @@ cms.contenttypes.ui.person.contact.type=Contact type
cms.contenttypes.ui.person.contact.title=Contact
#L\u00f6schen
cms.contenttypes.ui.person.contact.del=Delete
+#No contacts assoicated yet
+"cms.contenttypes.ui.genericorgaunit.contacts.none=No contacts associated yet
+cms.contenttypes.ui.genericorgaunit.contact.up=Up
+cms.contenttypes.ui.genericorgaunit.contact.down=Down
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties
index 7dba40169..00e557b92 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties
@@ -139,3 +139,7 @@ cms.contenttypes.ui.person.contact.type=Kontakttyp
cms.contenttypes.ui.person.contact.title=Kontakt
#L\u00f6schen
cms.contenttypes.ui.person.contact.del=L\u00f6schen
+#No contacts assoicated yet
+"cms.contenttypes.ui.genericorgaunit.contacts.none=Derzeit sind keine Kontakte verkn\u00fcpft
+cms.contenttypes.ui.genericorgaunit.contact.up=Hoch
+cms.contenttypes.ui.genericorgaunit.contact.down=Runter
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
index 29bfdcfe8..6025266f0 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
@@ -170,7 +170,8 @@ public class GenericPerson extends ContentPage implements RelationAttributeInter
String fullname = getFullName();
if (fullname != null && !fullname.isEmpty()) {
setTitle(fullname);
- setName(GenericPerson.urlSave(fullname));
+ //setName(GenericPerson.urlSave(fullname));
+ setName(GenericPerson.urlSave(String.format("%s %s", getSurname(), getGivenName())));
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
index 18d74aad7..2e7f17ccf 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitContactTable.java
@@ -32,7 +32,6 @@ import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
-import com.arsdigita.bebop.util.GlobalizationUtil;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ItemSelectionModel;
@@ -46,6 +45,7 @@ import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DataObjectNotFoundException;
+import com.arsdigita.cms.util.GlobalizationUtil;;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
@@ -106,7 +106,7 @@ public class GenericOrganizationalUnitContactTable extends Table implements
tabModel.get(1).setCellRenderer(new EditCellRenderer());
tabModel.get(2).setCellRenderer(new DeleteCellRenderer());
tabModel.get(3).setCellRenderer(new UpCellRenderer());
- tabModel.get(3).setCellRenderer(new DownCellRenderer());
+ tabModel.get(4).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
@@ -174,16 +174,37 @@ public class GenericOrganizationalUnitContactTable extends Table implements
s_log.debug(String.format(
"Getting human readable contact type for contact type \"%s\"...",
m_contactCollection.getContactType()));
- s_log.debug(String.format(
- "Human readable contact type is: \"%s\"...",
- m_contacttypes.getRelationAttribute(
- m_contactCollection.getContactType(),
- DispatcherHelper.getNegotiatedLocale().
- getLanguage())));
- return m_contacttypes.getRelationAttribute(
- m_contactCollection.getContactType(),
- DispatcherHelper.getNegotiatedLocale().
- getLanguage());
+ String lang =
+ DispatcherHelper.getNegotiatedLocale().
+ getLanguage();
+ if (m_contacttypes.size() <= 0) {
+ s_log.warn(String.format("No matching relation "
+ + "attributes for contact type '%s' found. "
+ + "Using key as fallback.",
+ m_contactCollection.getContactType()));
+ return m_contactCollection.getContactType();
+ }
+ if (m_contacttypes.getRelationAttribute(m_contactCollection.
+ getContactType(), lang) == null) {
+ s_log.debug(String.format(
+ "No human readable name "
+ + "found for '%s' for language '%s' Using key.",
+ m_contactCollection.
+ getContactType(),
+ lang));
+ return m_contactCollection.getContactType();
+ } else {
+ s_log.debug(String.format(
+ "Human readable contact type is: \"%s\"...",
+ m_contacttypes.getRelationAttribute(
+ m_contactCollection.getContactType(),
+ DispatcherHelper.getNegotiatedLocale().
+ getLanguage()).getName()));
+ return m_contacttypes.getRelationAttribute(
+ m_contactCollection.getContactType(),
+ DispatcherHelper.getNegotiatedLocale().
+ getLanguage()).getName();
+ }
case 1:
return m_contact.getTitle();
case 2:
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonContactTable.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonContactTable.java
index 2682ec7be..607c90d08 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonContactTable.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericPersonContactTable.java
@@ -184,16 +184,30 @@ public class GenericPersonContactTable extends Table implements
s_log.debug(String.format(
"Getting human readable contact type for contact type \"%s\"...",
m_contactCollection.getContactType()));
+ String lang = DispatcherHelper.getNegotiatedLocale().
+ getLanguage();
+ if (contacttypes.size() <= 0) {
+ s_log.warn("No contact entry types found. Using key as "
+ + "fallback.");
+ return m_contactCollection.getContactType();
+ }
+ if ((contacttypes.getRelationAttribute(m_contactCollection.
+ getContactType(), lang) == null)) {
+ s_log.debug(String.format(
+ "No human readable name "
+ + "found for '%s' for language '%s' Using key.",
+ m_contactCollection.getContactType(),
+ lang));
+ return m_contactCollection.getContactType();
+ }
s_log.debug(String.format(
"Human readable contact type is: \"%s\"...",
contacttypes.getRelationAttribute(
m_contactCollection.getContactType(),
- DispatcherHelper.getNegotiatedLocale().
- getLanguage())));
- return contacttypes.getRelationAttribute(m_contactCollection.
- getContactType(),
- DispatcherHelper.
- getNegotiatedLocale().getLanguage()).getName();
+ lang)));
+ return contacttypes.getRelationAttribute(
+ m_contactCollection.getContactType(),
+ lang).getName();
case 1:
return m_contact.getTitle();
case 2:
@@ -323,7 +337,7 @@ public class GenericPersonContactTable extends Table implements
state);
GenericPersonContactCollection contacts = person.getContacts();
if ((contacts.size() - 1) == row) {
- s_log.debug("Row is last row in table, don't show down-link");
+ s_log.debug("Row is last row in table, don't show down-link");
return new Label("");
} else {
ControlLink link = new ControlLink("down");
diff --git a/ccm-core/src/log4j.properties b/ccm-core/src/log4j.properties
index 252371a4b..85ed7ec7e 100755
--- a/ccm-core/src/log4j.properties
+++ b/ccm-core/src/log4j.properties
@@ -61,6 +61,6 @@ log4j.logger.com.arsdigita.packaging.Loader=INFO
# For debugging all queries run by persistence
#log4j.logger.com.redhat.persistence.engine.rdbms.RDBMSEngine=INFO
-log4j.logger.com.arsdigita.cms.search.ContentPageMetadataProvider=DEBUG
-log4j.logger.com.arsdigita.london.importer=DEBUG
-log4j.logger.com.arsdigita.london.terms.importer.TermItemBuilder=DEBUG
\ No newline at end of file
+#log4j.logger.com.arsdigita.cms.search.ContentPageMetadataProvider=DEBUG
+#log4j.logger.com.arsdigita.london.importer=DEBUG
+#log4j.logger.com.arsdigita.london.terms.importer.TermItemBuilder=DEBUG
\ No newline at end of file
diff --git a/ccm-ldn-importer/src/com/arsdigita/london/importer/cms/ItemImportTool.java b/ccm-ldn-importer/src/com/arsdigita/london/importer/cms/ItemImportTool.java
index 0a53e95d4..22c9c3b97 100755
--- a/ccm-ldn-importer/src/com/arsdigita/london/importer/cms/ItemImportTool.java
+++ b/ccm-ldn-importer/src/com/arsdigita/london/importer/cms/ItemImportTool.java
@@ -154,31 +154,47 @@ public class ItemImportTool extends Program {
ContentItem item =
(ContentItem) itemParser.getDomainObject();
if (item == null) {
- s_log.warn("item is null.Igoring...");
+ s_log.warn("item is null. Igoring...");
return;
}
s_log.debug(String.format("Got item from ItemParser:"));
s_log.debug(String.format("OID : %s", item.getOID()));
s_log.debug(String.format("Name : %s", item.getName()));
- s_log.debug(String.format("Title: %s", item.get("title")));
+ s_log.debug(String.format("Item file name : %s", itemFile.
+ getName()));
+ s_log.debug(
+ String.format("Title: %s", item.get("title")));
if (item instanceof ContentPage) {
s_log.debug("Item is a content page...");
}
/*
* Multi lang extension begin
*/
- String itemName = item.getName();
+ String itemName = itemFile.getName().substring(
+ 0, itemFile.getName().length() - 4);
String bundleName;
+ s_log.debug(String.format("Using item name '%s'...",
+ item.getName()));
if (itemName.lastIndexOf('-') == -1) {
+ s_log.debug(
+ "No '-' in name, using name as bundle name");
bundleName = itemName;
} else {
- if (itemName.substring((itemName.lastIndexOf('-') + 1)).
+ s_log.debug(
+ "Found a '-' in the, name, using part before '-' as bundle name.");
+ if (itemName.substring((itemName.lastIndexOf('-')
+ + 1)).
equals("de")
- || itemName.substring((itemName.lastIndexOf('-') + 1)).
+ || itemName.substring((itemName.lastIndexOf('-')
+ + 1)).
equals("en")) {
bundleName = itemName.substring(0, itemName.
lastIndexOf('-'));
+ s_log.debug(String.format(
+ "Created bundle name: '%s'", bundleName));
} else {
+ s_log.debug(
+ "Part behind the last '-' is not 'de' or 'en', using item name as bundle name");
bundleName = itemName;
}
}
@@ -208,13 +224,15 @@ public class ItemImportTool extends Program {
s_log.debug("Item is localized...");
bundle = bundles.get(bundleName);
if (bundle == null) {
- s_log.debug("No content bundle found for item, creating new.");
+ s_log.debug(
+ "No content bundle found for item, creating new.");
bundle = new ContentBundle(item);
bundle.setParent(folder);
bundle.setName(bundleName);
bundles.put(bundleName, bundle);
} else {
- s_log.debug("Found content bundle for item, adding item as instance.");
+ s_log.debug(
+ "Found content bundle for item, adding item as instance.");
bundle.addInstance(item);
}
}