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); } }