RelationAttributes (Database Driven Enum) werden jetzt bereits im Loader von ccm-sci-bundle mit Werten gefüllt (Ticket #1733). Außerdem einige technische Änderungen an RelationAttribute.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2251 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-07-10 15:38:38 +00:00
parent 416b3cb01d
commit 1a9c542474
15 changed files with 1371 additions and 113 deletions

View File

@ -2,7 +2,7 @@
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project" <ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
name="ccm-cms" name="ccm-cms"
prettyName="Red Hat CCM Content Management System" prettyName="Red Hat CCM Content Management System"
version="6.6.8" version="6.6.9"
release="1" release="1"
webapp="ROOT"> webapp="ROOT">
<ccm:dependencies> <ccm:dependencies>

View File

@ -21,9 +21,9 @@ model com.arsdigita.cms;
import com.arsdigita.kernel.ACSObject; import com.arsdigita.kernel.ACSObject;
object type RelationAttribute { object type RelationAttribute extends ACSObject {
BigDecimal[1..1] id = cms_relation_attribute.object_id INTEGER; //BigDecimal[1..1] id = cms_relation_attribute.object_id INTEGER;
String[1..1] attribute = cms_relation_attribute.attribute VARCHAR(100); String[1..1] attribute = cms_relation_attribute.attribute VARCHAR(100);
String[1..1] attr_key = cms_relation_attribute.attr_key VARCHAR(100); String[1..1] attr_key = cms_relation_attribute.attr_key VARCHAR(100);
String[1..1] lang = cms_relation_attribute.lang VARCHAR(2); String[1..1] lang = cms_relation_attribute.lang VARCHAR(2);
@ -31,6 +31,7 @@ object type RelationAttribute {
String[0..1] description = cms_relation_attribute.description VARCHAR(500); String[0..1] description = cms_relation_attribute.description VARCHAR(500);
unique (attribute, attr_key, lang); unique (attribute, attr_key, lang);
object key (id); //object key (id);
reference key(cms_relation_attribute.object_id);
} }

View File

@ -69,4 +69,8 @@
<!-- Fill the personsstr column --> <!-- Fill the personsstr column -->
<script class="com.arsdigita.cms.upgrade.PersonsStrColumn"/> <script class="com.arsdigita.cms.upgrade.PersonsStrColumn"/>
</version> </version>
<version from="6.6.8" to="6.6.9">
<!-- Make RelationAttribute SubClass of ACSObject -->
<script class="com.arsdigita.cms.upgrade.RelationAttributeACSObject"/>
</version>
</upgrade> </upgrade>

View File

@ -110,8 +110,7 @@ public class Initializer extends CompoundInitializer {
add(new PDLInitializer(new ManifestSource("ccm-cms.pdl.mf", add(new PDLInitializer(new ManifestSource("ccm-cms.pdl.mf",
new NameFilter(DbHelper new NameFilter(DbHelper
.getDatabaseSuffix(database), .getDatabaseSuffix(database),
"pdl"))) "pdl"))));
);
add(new com.arsdigita.cms.contentsection.Initializer()); add(new com.arsdigita.cms.contentsection.Initializer());
add(new com.arsdigita.cms.publishToFile.Initializer()); add(new com.arsdigita.cms.publishToFile.Initializer());
@ -315,6 +314,15 @@ public class Initializer extends CompoundInitializer {
} }
}); });
f.registerInstantiator(RelationAttribute.BASE_DATA_OBJECT_TYPE,
new ACSObjectInstantiator() {
@Override
public DomainObject doNewInstance(DataObject dataObject) {
return new RelationAttribute(dataObject);
}
});
} }
private void registerLuceneEngine() { private void registerLuceneEngine() {

View File

@ -6,7 +6,7 @@
package com.arsdigita.cms; package com.arsdigita.cms;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObject; import com.arsdigita.kernel.ACSObject;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -24,7 +24,7 @@ import java.math.BigDecimal;
* *
* @author quasi * @author quasi
*/ */
public class RelationAttribute extends DomainObject { public class RelationAttribute extends ACSObject { //extends DomainObject {
public static final String ID = "id"; public static final String ID = "id";
public static final String ATTRIBUTE = "attribute"; public static final String ATTRIBUTE = "attribute";

View File

@ -0,0 +1,188 @@
/*
* Copyright (C) 2013 Jens Pelzetter
*
* 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;
import com.arsdigita.xml.XML;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
/**
* This is a helper tool for loading data for the RelationAttributes (Database Driven Enums)
* into the database in a loader of a module. This helper class uses a XML format for loading
* the enum data, which looks like this:
*
* <pre>
* &lt;ddenums&gt;
* &lt;ddenum name="..."&gt;
* &lt;entry key="..." lang="..." id="..."&gt;
* &lt;value&gt;...&lt;/value&gt;
* &lt;description&gt;...&lt;/description&gt;
* &lt;entry&gt;
* &lt;/ddenum&gt;
* &lt;/ddenums&gt;
* </pre>
*
* The root element is {@code <ddenums>} which can appear only once per file. The {@code <ddenums} can have multiple
* {@code <ddenum>} elements as child elements. The {@code <ddenum> element has one attribute, {@code name} which contains
* the name of the enumeration. Each {@code <ddenum>} may have multiple {@code<entry>} child elements. The
* {@code <entry>} element has three attributes.
*
* <dl>
* <dt>{@code key}</dt><dd>The key of the entry. This attribute is mandatory.</dd>
* <dt>{@code lang}</dt><dd>The language of the entry. This attribute is mandatory. The combination of {@code key}
* and {@code lang} should be unique.</dd>
* <dt>{@code id}</dt><dd>This attribute is optional and contains the database id of the entry if necessary. The
* value is maybe ignored by this import tool.</dd>
* </dl>
*
* Each entry has at least a {@code <value>} element as child. The {@code <value>} element contains the value of the
* enum entry. Optionally there can also be can descriptions element containing a description of the entry.
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RelationAttributeImportTool {
private final static Logger LOGGER = Logger.getLogger(RelationAttributeImportTool.class);
public void loadData(final String fileName) {
XML.parseResource(fileName, new RelationAttributeXmlHandler());
}
//Suppressing this warnings because they are false positives here.
@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.AvoidStringBufferField"})
private class RelationAttributeXmlHandler extends DefaultHandler {
private String currentEnum;
private String currentKey;
private String currentLang;
private String currentId;
private String currentValue;
private String currentDesc;
private StringBuffer charBuffer;
public RelationAttributeXmlHandler() {
super();
//Nothing
}
@Override
public void startElement(final String uri,
final String localName,
final String qName,
final Attributes attributes) {
if ("ddenum".equals(qName)) {
currentEnum = attributes.getValue("name");
} else if ("entry".equals(qName)) {
currentKey = attributes.getValue("key");
currentLang = attributes.getValue("lang");
currentId = attributes.getValue("id");
} else if ("value".equals(qName)) {
//Create new StringBuffer of creating a string from the content of the element
charBuffer = new StringBuffer();
} else if ("description".equals(qName)) {
//Create new StringBuffer of creating a string from the content of the element
charBuffer = new StringBuffer();
}
}
@Override
public void endElement(final String uri,
final String localName,
final String qName) {
if ("ddenum".equals(qName)) {
currentEnum = "";
} else if ("entry".equals(qName)) {
createEntry();
currentKey = "";
currentLang = "";
currentId = "";
currentValue = "";
currentDesc = "";
} else if ("value".equals(qName)) {
//Copy the value of the StringBuffer charBuffer to currentValue
currentValue = charBuffer.toString().trim();
charBuffer = new StringBuffer();
} else if ("description".equals(qName)) {
//Copy the value of the StringBuffer charBuffer to currentValue
currentDesc = charBuffer.toString().trim();
charBuffer = new StringBuffer();
}
}
@Override
public void characters(final char[] chars, final int start, final int length) {
if (charBuffer != null) {
for(int i = start; i < start + length; i++) {
charBuffer.append(chars[i]);
}
}
}
//Supressing this warning since there is no better way yet.
@SuppressWarnings("PMD.NPathComplexity")
private void createEntry() {
if ((currentEnum == null) || currentEnum.isEmpty()) {
LOGGER.warn(String.format(
"Value for current enum is empty. Ignorning entry with key '%s' and lang '%s'.",
currentKey,
currentLang));
return;
}
if ((currentKey == null) || currentKey.isEmpty()) {
LOGGER.warn("No key. Ignorning entry");
return;
}
if ((currentLang == null) || currentLang.isEmpty()) {
LOGGER.warn(String.format("No lang for entry with key '%s'. Ignoring entry",
currentKey));
return;
}
LOGGER.warn("Creating RelationAttribute entry with this values:");
LOGGER.warn(String.format("\tcurrentEnum = '%s'", currentEnum));
LOGGER.warn(String.format("\tcurrentKey = '%s'", currentKey));
LOGGER.warn(String.format("\tcurrentLang = '%s'", currentLang));
LOGGER.warn(String.format("\tcurrentValue = '%s'", currentValue));
final RelationAttribute entry = new RelationAttribute();
if ((currentId != null) && !currentId.isEmpty()) {
entry.setID(new BigDecimal(currentId));
}
entry.setAttribute(currentEnum);
entry.setKey(currentKey);
entry.setLanguage(currentLang);
entry.setName(currentValue);
if ((currentDesc != null) && !currentValue.isEmpty()) {
entry.setDescription(currentDesc);
}
entry.save();
}
}
}

View File

@ -16,6 +16,8 @@ import com.arsdigita.util.cmd.Program;
import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLine;
/** /**
* Adds a column {@code personsStr} to GenericOrganizationalUnit, including values. This column contains the names
* of all members of an organizational unit as one string. See {@link GenericOrganizationalUnit} for more details.
* *
* @author Jens Pelzetter <jens@jp-digital.de> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$

View File

@ -0,0 +1,187 @@
package com.arsdigita.cms.upgrade;
import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.kernel.KernelExcursion;
import com.arsdigita.runtime.RuntimeConfig;
import com.arsdigita.util.cmd.Program;
import com.arsdigita.util.jdbc.Connections;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.cli.CommandLine;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class RelationAttributeACSObject extends Program {
public RelationAttributeACSObject() {
super("RelationAttributeACSObejct", "1.0.0", "");
}
public static final void main(final String[] args) {
new RelationAttributeACSObject().run(args);
}
@Override
protected void doRun(final CommandLine cmdLine) {
new KernelExcursion() {
@Override
protected void excurse() {
final Connection connection = Connections.acquire(RuntimeConfig.getConfig().getJDBCURL());
try {
connection.setAutoCommit(false);
} catch (SQLException ex) {
System.err.println("Failed to configure JDBC connection.");
printStackTrace(ex);
close(connection);
return;
}
final List<RelationAttributeEntry> entries = new ArrayList<RelationAttributeEntry>();
try {
final Statement stmt = connection.createStatement();
final ResultSet result = stmt.executeQuery(
"SELECT attribute, attr_key, lang, name, description FROM cms_relation_attribute;");
while (result.next()) {
final RelationAttributeEntry entry = new RelationAttributeEntry();
entry.setAttribute(result.getString("attribute"));
entry.setKey(result.getString("attr_key"));
entry.setLanguage(result.getString("lang"));
entry.setName(result.getString("name"));
entry.setDescription(result.getString("description"));
entries.add(entry);
}
System.out.printf("Found %d RelationAttributes entries.\n", entries.size());
stmt.addBatch("DROP TABLE 'cms_relation_attribute';");
stmt.addBatch("CREATE TABLE cms_relation_attribute object_id integer NOT NULL,"
+ "attribute character varying(100) NOT NULL,"
+ "attr_key character varying(100) NOT NULL,"
+ "lang character varying(2) NOT NULL,"
+ "name character varying(100) NOT NULL,"
+ "description character varying(500)");
stmt.addBatch("ALTER TABLE public.cms_relation_attribute OWNER TO ccm;");
stmt.addBatch("ALTER TABLE ONLY cms_relation_attribute "
+ "ADD CONSTRAINT cms_rela_attrib_obj_id_f_23qc3 FOREIGN KEY (object_id) REFERENCES acs_objects(object_id);");
stmt.executeBatch();
close(connection);
} catch (SQLException ex) {
System.err.printf("SQL Error");
rollback(connection);
close(connection);
return;
}
for (RelationAttributeEntry entry : entries) {
createRelationAttribute(entry);
}
}
};
}
private void createRelationAttribute(final RelationAttributeEntry entry) {
final RelationAttribute attribute = new RelationAttribute();
attribute.setAttribute(entry.getAttribute());
attribute.setKey(entry.getKey());
attribute.setLanguage(entry.getLanguage());
attribute.setName(entry.getName());
attribute.setDescription(entry.getDescription());
attribute.save();
}
;
private void rollback(final Connection conn) {
try {
System.err.println("WARNING: Rollback.");
conn.rollback();
} catch (SQLException ex1) {
System.err.println("Rollback failed.");
ex1.printStackTrace(System.err);
}
}
private void close(final Connection conn) {
try {
conn.close();
} catch (SQLException ex) {
System.err.println("Failed to close JDBC connection.");
printStackTrace(ex);
}
}
private void printStackTrace(final SQLException ex) {
ex.printStackTrace(System.err);
if (ex.getNextException() != null) {
printStackTrace(ex.getNextException());
}
}
private class RelationAttributeEntry {
private String attribute;
private String key;
private String language;
private String name;
private String description;
public RelationAttributeEntry() {
//Nothing
}
public String getAttribute() {
return attribute;
}
public void setAttribute(final String attribute) {
this.attribute = attribute;
}
public String getKey() {
return key;
}
public void setKey(final String key) {
this.key = key;
}
public String getLanguage() {
return language;
}
public void setLanguage(final String language) {
this.language = language;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
}

View File

@ -0,0 +1,173 @@
<?xml version="1.0"?>
<ddenums>
<ddenum name="GenericContactTypes">
<entry key="commonContact" lang="de">
<value>Kontakt</value>
</entry>
<entry key="commonContact" lang="en">
<value>Contact</value>
</entry>
<entry key="speaker" lang="en">
<value>Speaker</value>
</entry>
<entry key="speaker" lang="de">
<value>Sprecher</value>
</entry>
<entry key="office" lang="en">
<value>Office</value>
</entry>
<entry key="office" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="GenericContactEntryKeys">
<entry key="phoneOffice" lang="en">
<value>Phone (office)</value>
</entry>
<entry key="phoneOffice" lang="de">
<value>Telefon (Büro)</value>
</entry>
<entry key="phonePrivate" lang="en">
<value>Phone (home)</value>
</entry>
<entry key="phonePrivate" lang="de">
<value>Telefon (Privat)</value>
</entry>
<entry key="phoneMobile" lang="en">
<value>Phone (mobil)</value>
</entry>
<entry key="phoneMobile" lang="de">
<value>Telefon (Mobil)</value>
</entry>
<entry key="fax" lang="en">
<value>Fax</value>
</entry>
<entry key="fax" lang="de">
<value>Fax</value>
</entry>
<entry key="email" lang="en">
<value>Email</value>
</entry>
<entry key="email" lang="de">
<value>E-Mail</value>
</entry>
<entry key="office" lang="en">
<value>Room</value>
</entry>
<entry key="office" lang="de">
<value>Raum</value>
</entry>
<entry key="homepage" lang="en">
<value>Homepage</value>
</entry>
<entry key="homepage" lang="de">
<value>Homepage</value>
</entry>
<entry key="im" lang="en">
<value>Instant Messanger</value>
</entry>
<entry key="im" lang="de">
<value>Instant Messanger</value>
</entry>
<entry key="visitingHours" lang="en">
<value>Visiting Hours</value>
</entry>
<entry key="visitingHours" lang="de">
<value>Sprechzeiten</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitRole">
<entry key="head" lang="en">
<value>Chief executive officer</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitMemberStatus">
<entry key="active" lang="en">
<value>Active</value>
</entry>
<entry key="active" lang="de">
<value>Aktiv</value>
</entry>
<entry key="associated" lang="en">
<value>Associated</value>
</entry>
<entry key="associated" lang="de">
<value>Assoziiert</value>
</entry>
<entry key="former" lang="en">
<value>Former</value>
</entry>
<entry key="former" lang="de">
<value>Ehemalig</value>
</entry>
</ddenum>
<ddenum name="SciInstituteRole">
<entry key="head" lang="en">
<value>Managing director</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführer</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="administration" lang="en">
<value>Administration</value>
</entry>
<entry key="administration" lang="de">
<value>Verwaltung</value>
</entry>
<entry key="guest" lang="en">
<value>Guest</value>
</entry>
<entry key="guest" lang="de">
<value>Gast</value>
</entry>
</ddenum>
<ddenum name="SciDepartmentRole">
<entry key="head" lang="en">
<value>Department head</value>
</entry>
<entry key="head" lang="de">
<value>Abteilungsleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="secretariat" lang="en">
<value>Office</value>
</entry>
<entry key="secretariat" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="SciProjectRole">
<entry key="head" lang="en">
<value>Project head</value>
</entry>
<entry key="head" lang="de">
<value>Projektleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
</ddenums>

View File

@ -0,0 +1,173 @@
<?xml version="1.0"?>
<ddenums>
<ddenum name="GenericContactTypes">
<entry key="commonContact" lang="de">
<value>Kontakt</value>
</entry>
<entry key="commonContact" lang="en">
<value>Contact</value>
</entry>
<entry key="speaker" lang="en">
<value>Speaker</value>
</entry>
<entry key="speaker" lang="de">
<value>Sprecher</value>
</entry>
<entry key="office" lang="en">
<value>Office</value>
</entry>
<entry key="office" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="GenericContactEntryKeys">
<entry key="phoneOffice" lang="en">
<value>Phone (office)</value>
</entry>
<entry key="phoneOffice" lang="de">
<value>Telefon (Büro)</value>
</entry>
<entry key="phonePrivate" lang="en">
<value>Phone (home)</value>
</entry>
<entry key="phonePrivate" lang="de">
<value>Telefon (Privat)</value>
</entry>
<entry key="phoneMobile" lang="en">
<value>Phone (mobil)</value>
</entry>
<entry key="phoneMobile" lang="de">
<value>Telefon (Mobil)</value>
</entry>
<entry key="fax" lang="en">
<value>Fax</value>
</entry>
<entry key="fax" lang="de">
<value>Fax</value>
</entry>
<entry key="email" lang="en">
<value>Email</value>
</entry>
<entry key="email" lang="de">
<value>E-Mail</value>
</entry>
<entry key="office" lang="en">
<value>Room</value>
</entry>
<entry key="office" lang="de">
<value>Raum</value>
</entry>
<entry key="homepage" lang="en">
<value>Homepage</value>
</entry>
<entry key="homepage" lang="de">
<value>Homepage</value>
</entry>
<entry key="im" lang="en">
<value>Instant Messanger</value>
</entry>
<entry key="im" lang="de">
<value>Instant Messanger</value>
</entry>
<entry key="visitingHours" lang="en">
<value>Visiting Hours</value>
</entry>
<entry key="visitingHours" lang="de">
<value>Sprechzeiten</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitRole">
<entry key="head" lang="en">
<value>Chief executive officer</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitMemberStatus">
<entry key="active" lang="en">
<value>Active</value>
</entry>
<entry key="active" lang="de">
<value>Aktiv</value>
</entry>
<entry key="associated" lang="en">
<value>Associated</value>
</entry>
<entry key="associated" lang="de">
<value>Assoziiert</value>
</entry>
<entry key="former" lang="en">
<value>Former</value>
</entry>
<entry key="former" lang="de">
<value>Ehemalig</value>
</entry>
</ddenum>
<ddenum name="SciInstituteRole">
<entry key="head" lang="en">
<value>Managing director</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführer</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="administration" lang="en">
<value>Administration</value>
</entry>
<entry key="administration" lang="de">
<value>Verwaltung</value>
</entry>
<entry key="guest" lang="en">
<value>Guest</value>
</entry>
<entry key="guest" lang="de">
<value>Gast</value>
</entry>
</ddenum>
<ddenum name="SciDepartmentRole">
<entry key="head" lang="en">
<value>Department head</value>
</entry>
<entry key="head" lang="de">
<value>Abteilungsleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="secretariat" lang="en">
<value>Office</value>
</entry>
<entry key="secretariat" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="SciProjectRole">
<entry key="head" lang="en">
<value>Project head</value>
</entry>
<entry key="head" lang="de">
<value>Projektleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
</ddenums>

View File

@ -0,0 +1,173 @@
<?xml version="1.0"?>
<ddenums>
<ddenum name="GenericContactTypes">
<entry key="commonContact" lang="de">
<value>Kontakt</value>
</entry>
<entry key="commonContact" lang="en">
<value>Contact</value>
</entry>
<entry key="speaker" lang="en">
<value>Speaker</value>
</entry>
<entry key="speaker" lang="de">
<value>Sprecher</value>
</entry>
<entry key="office" lang="en">
<value>Office</value>
</entry>
<entry key="office" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="GenericContactEntryKeys">
<entry key="phoneOffice" lang="en">
<value>Phone (office)</value>
</entry>
<entry key="phoneOffice" lang="de">
<value>Telefon (Büro)</value>
</entry>
<entry key="phonePrivate" lang="en">
<value>Phone (home)</value>
</entry>
<entry key="phonePrivate" lang="de">
<value>Telefon (Privat)</value>
</entry>
<entry key="phoneMobile" lang="en">
<value>Phone (mobil)</value>
</entry>
<entry key="phoneMobile" lang="de">
<value>Telefon (Mobil)</value>
</entry>
<entry key="fax" lang="en">
<value>Fax</value>
</entry>
<entry key="fax" lang="de">
<value>Fax</value>
</entry>
<entry key="email" lang="en">
<value>Email</value>
</entry>
<entry key="email" lang="de">
<value>E-Mail</value>
</entry>
<entry key="office" lang="en">
<value>Room</value>
</entry>
<entry key="office" lang="de">
<value>Raum</value>
</entry>
<entry key="homepage" lang="en">
<value>Homepage</value>
</entry>
<entry key="homepage" lang="de">
<value>Homepage</value>
</entry>
<entry key="im" lang="en">
<value>Instant Messanger</value>
</entry>
<entry key="im" lang="de">
<value>Instant Messanger</value>
</entry>
<entry key="visitingHours" lang="en">
<value>Visiting Hours</value>
</entry>
<entry key="visitingHours" lang="de">
<value>Sprechzeiten</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitRole">
<entry key="head" lang="en">
<value>Chief executive officer</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitMemberStatus">
<entry key="active" lang="en">
<value>Active</value>
</entry>
<entry key="active" lang="de">
<value>Aktiv</value>
</entry>
<entry key="associated" lang="en">
<value>Associated</value>
</entry>
<entry key="associated" lang="de">
<value>Assoziiert</value>
</entry>
<entry key="former" lang="en">
<value>Former</value>
</entry>
<entry key="former" lang="de">
<value>Ehemalig</value>
</entry>
</ddenum>
<ddenum name="SciInstituteRole">
<entry key="head" lang="en">
<value>Managing director</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführer</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="administration" lang="en">
<value>Administration</value>
</entry>
<entry key="administration" lang="de">
<value>Verwaltung</value>
</entry>
<entry key="guest" lang="en">
<value>Guest</value>
</entry>
<entry key="guest" lang="de">
<value>Gast</value>
</entry>
</ddenum>
<ddenum name="SciDepartmentRole">
<entry key="head" lang="en">
<value>Department head</value>
</entry>
<entry key="head" lang="de">
<value>Abteilungsleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="secretariat" lang="en">
<value>Office</value>
</entry>
<entry key="secretariat" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="SciProjectRole">
<entry key="head" lang="en">
<value>Project head</value>
</entry>
<entry key="head" lang="de">
<value>Projektleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
</ddenums>

View File

@ -0,0 +1,173 @@
<?xml version="1.0"?>
<ddenums>
<ddenum name="GenericContactTypes">
<entry key="commonContact" lang="de">
<value>Kontakt</value>
</entry>
<entry key="commonContact" lang="en">
<value>Contact</value>
</entry>
<entry key="speaker" lang="en">
<value>Speaker</value>
</entry>
<entry key="speaker" lang="de">
<value>Sprecher</value>
</entry>
<entry key="office" lang="en">
<value>Office</value>
</entry>
<entry key="office" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="GenericContactEntryKeys">
<entry key="phoneOffice" lang="en">
<value>Phone (office)</value>
</entry>
<entry key="phoneOffice" lang="de">
<value>Telefon (Büro)</value>
</entry>
<entry key="phonePrivate" lang="en">
<value>Phone (home)</value>
</entry>
<entry key="phonePrivate" lang="de">
<value>Telefon (Privat)</value>
</entry>
<entry key="phoneMobile" lang="en">
<value>Phone (mobil)</value>
</entry>
<entry key="phoneMobile" lang="de">
<value>Telefon (Mobil)</value>
</entry>
<entry key="fax" lang="en">
<value>Fax</value>
</entry>
<entry key="fax" lang="de">
<value>Fax</value>
</entry>
<entry key="email" lang="en">
<value>Email</value>
</entry>
<entry key="email" lang="de">
<value>E-Mail</value>
</entry>
<entry key="office" lang="en">
<value>Room</value>
</entry>
<entry key="office" lang="de">
<value>Raum</value>
</entry>
<entry key="homepage" lang="en">
<value>Homepage</value>
</entry>
<entry key="homepage" lang="de">
<value>Homepage</value>
</entry>
<entry key="im" lang="en">
<value>Instant Messanger</value>
</entry>
<entry key="im" lang="de">
<value>Instant Messanger</value>
</entry>
<entry key="visitingHours" lang="en">
<value>Visiting Hours</value>
</entry>
<entry key="visitingHours" lang="de">
<value>Sprechzeiten</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitRole">
<entry key="head" lang="en">
<value>Chief executive officer</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitMemberStatus">
<entry key="active" lang="en">
<value>Active</value>
</entry>
<entry key="active" lang="de">
<value>Aktiv</value>
</entry>
<entry key="associated" lang="en">
<value>Associated</value>
</entry>
<entry key="associated" lang="de">
<value>Assoziiert</value>
</entry>
<entry key="former" lang="en">
<value>Former</value>
</entry>
<entry key="former" lang="de">
<value>Ehemalig</value>
</entry>
</ddenum>
<ddenum name="SciInstituteRole">
<entry key="head" lang="en">
<value>Managing director</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführer</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="administration" lang="en">
<value>Administration</value>
</entry>
<entry key="administration" lang="de">
<value>Verwaltung</value>
</entry>
<entry key="guest" lang="en">
<value>Guest</value>
</entry>
<entry key="guest" lang="de">
<value>Gast</value>
</entry>
</ddenum>
<ddenum name="SciDepartmentRole">
<entry key="head" lang="en">
<value>Department head</value>
</entry>
<entry key="head" lang="de">
<value>Abteilungsleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="secretariat" lang="en">
<value>Office</value>
</entry>
<entry key="secretariat" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="SciProjectRole">
<entry key="head" lang="en">
<value>Project head</value>
</entry>
<entry key="head" lang="de">
<value>Projektleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
</ddenums>

View File

@ -0,0 +1,173 @@
<?xml version="1.0"?>
<ddenums>
<ddenum name="GenericContactTypes">
<entry key="commonContact" lang="de">
<value>Kontakt</value>
</entry>
<entry key="commonContact" lang="en">
<value>Contact</value>
</entry>
<entry key="speaker" lang="en">
<value>Speaker</value>
</entry>
<entry key="speaker" lang="de">
<value>Sprecher</value>
</entry>
<entry key="office" lang="en">
<value>Office</value>
</entry>
<entry key="office" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="GenericContactEntryKeys">
<entry key="phoneOffice" lang="en">
<value>Phone (office)</value>
</entry>
<entry key="phoneOffice" lang="de">
<value>Telefon (Büro)</value>
</entry>
<entry key="phonePrivate" lang="en">
<value>Phone (home)</value>
</entry>
<entry key="phonePrivate" lang="de">
<value>Telefon (Privat)</value>
</entry>
<entry key="phoneMobile" lang="en">
<value>Phone (mobil)</value>
</entry>
<entry key="phoneMobile" lang="de">
<value>Telefon (Mobil)</value>
</entry>
<entry key="fax" lang="en">
<value>Fax</value>
</entry>
<entry key="fax" lang="de">
<value>Fax</value>
</entry>
<entry key="email" lang="en">
<value>Email</value>
</entry>
<entry key="email" lang="de">
<value>E-Mail</value>
</entry>
<entry key="office" lang="en">
<value>Room</value>
</entry>
<entry key="office" lang="de">
<value>Raum</value>
</entry>
<entry key="homepage" lang="en">
<value>Homepage</value>
</entry>
<entry key="homepage" lang="de">
<value>Homepage</value>
</entry>
<entry key="im" lang="en">
<value>Instant Messanger</value>
</entry>
<entry key="im" lang="de">
<value>Instant Messanger</value>
</entry>
<entry key="visitingHours" lang="en">
<value>Visiting Hours</value>
</entry>
<entry key="visitingHours" lang="de">
<value>Sprechzeiten</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitRole">
<entry key="head" lang="en">
<value>Chief executive officer</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
<ddenum name="GenericOrganizationalUnitMemberStatus">
<entry key="active" lang="en">
<value>Active</value>
</entry>
<entry key="active" lang="de">
<value>Aktiv</value>
</entry>
<entry key="associated" lang="en">
<value>Associated</value>
</entry>
<entry key="associated" lang="de">
<value>Assoziiert</value>
</entry>
<entry key="former" lang="en">
<value>Former</value>
</entry>
<entry key="former" lang="de">
<value>Ehemalig</value>
</entry>
</ddenum>
<ddenum name="SciInstituteRole">
<entry key="head" lang="en">
<value>Managing director</value>
</entry>
<entry key="head" lang="de">
<value>Geschäftsführer</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="administration" lang="en">
<value>Administration</value>
</entry>
<entry key="administration" lang="de">
<value>Verwaltung</value>
</entry>
<entry key="guest" lang="en">
<value>Guest</value>
</entry>
<entry key="guest" lang="de">
<value>Gast</value>
</entry>
</ddenum>
<ddenum name="SciDepartmentRole">
<entry key="head" lang="en">
<value>Department head</value>
</entry>
<entry key="head" lang="de">
<value>Abteilungsleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
<entry key="secretariat" lang="en">
<value>Office</value>
</entry>
<entry key="secretariat" lang="de">
<value>Sekretariat</value>
</entry>
</ddenum>
<ddenum name="SciProjectRole">
<entry key="head" lang="en">
<value>Project head</value>
</entry>
<entry key="head" lang="de">
<value>Projektleitung</value>
</entry>
<entry key="member" lang="en">
<value>Member</value>
</entry>
<entry key="member" lang="de">
<value>Mitglied</value>
</entry>
</ddenum>
</ddenums>

View File

@ -19,6 +19,8 @@
package com.arsdigita.bundle; package com.arsdigita.bundle;
import com.arsdigita.categorization.Categorization; import com.arsdigita.categorization.Categorization;
import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.cms.RelationAttributeCollection;
import com.arsdigita.runtime.CompoundInitializer; import com.arsdigita.runtime.CompoundInitializer;
import com.arsdigita.runtime.DomainInitEvent; import com.arsdigita.runtime.DomainInitEvent;
import com.arsdigita.templating.PatternStylesheetResolver; import com.arsdigita.templating.PatternStylesheetResolver;
@ -60,5 +62,6 @@ public class Initializer extends CompoundInitializer {
// "webapp", // "webapp",
// new WebAppPatternGenerator() // new WebAppPatternGenerator()
// ); // );
} }
} }

View File

@ -15,13 +15,12 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
package com.arsdigita.bundle; package com.arsdigita.bundle;
import com.arsdigita.categorization.Category; import com.arsdigita.categorization.Category;
import com.arsdigita.categorization.RootCategoryCollection; import com.arsdigita.categorization.RootCategoryCollection;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.RelationAttributeImportTool;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.ui.role.RoleFactory; import com.arsdigita.cms.ui.role.RoleFactory;
import com.arsdigita.kernel.Role; import com.arsdigita.kernel.Role;
@ -62,8 +61,6 @@ public class Loader extends PackageLoader {
/** Logger instance for debugging */ /** Logger instance for debugging */
private static final Logger s_log = Logger.getLogger(Loader.class); private static final Logger s_log = Logger.getLogger(Loader.class);
// ///////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////
// Parameter Section // Parameter Section
// ///////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////
@ -83,9 +80,7 @@ public class Loader extends PackageLoader {
*/ */
private Parameter m_customApplicationInstances = new StringArrayParameter( private Parameter m_customApplicationInstances = new StringArrayParameter(
"com.arsdigita.bundle.loader.custom_app_instances", "com.arsdigita.bundle.loader.custom_app_instances",
Parameter.OPTIONAL, null Parameter.OPTIONAL, null);
);
/** /**
* Comma separated list of fully qualified filenames, each file containing * Comma separated list of fully qualified filenames, each file containing
* a set of Terms domain catagories definitions. These form an initial set * a set of Terms domain catagories definitions. These form an initial set
@ -95,11 +90,9 @@ public class Loader extends PackageLoader {
*/ */
private Parameter m_categoryFiles = new StringArrayParameter( private Parameter m_categoryFiles = new StringArrayParameter(
"com.arsdigita.bundle.loader.category_files", "com.arsdigita.bundle.loader.category_files",
Parameter.REQUIRED,new String[]{ Parameter.REQUIRED, new String[]{
"bundle/categories/sci-nav-domain-1.00.xml", "bundle/categories/sci-nav-domain-1.00.xml",
"bundle/categories/sci-nav-hierarchy-1.00.xml" } "bundle/categories/sci-nav-hierarchy-1.00.xml"});
);
/** /**
* List of comma separated sets of domain mappings. * List of comma separated sets of domain mappings.
* It's the developers / administrators responsibility to ensure all * It's the developers / administrators responsibility to ensure all
@ -118,15 +111,20 @@ public class Loader extends PackageLoader {
*/ */
private Parameter m_domainMappings = new StringArrayParameter( private Parameter m_domainMappings = new StringArrayParameter(
"com.arsdigita.bundle.loader.domain_mappings", "com.arsdigita.bundle.loader.domain_mappings",
Parameter.REQUIRED,new String[]{ "STD-NAV:/navigation/", Parameter.REQUIRED, new String[]{"STD-NAV:/navigation/",
"STD-NAV:/main/", "STD-NAV:/main/",
"STD-NAV:/portal/" } "STD-NAV:/portal/"});
);
/**
* Database Drive Enum data to load.
*/
private Parameter m_ddenums = new StringArrayParameter("com.arsdigita.bundle.loader.ddenums",
Parameter.REQUIRED,
new String[]{"bundle/ddenums.xml"});
// ///////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////
// Parameter Section END // Parameter Section END
// ///////////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////////
/** /**
* Constructor, just registers parameters. * Constructor, just registers parameters.
*/ */
@ -137,10 +135,10 @@ public class Loader extends PackageLoader {
register(m_customApplicationInstances); register(m_customApplicationInstances);
register(m_categoryFiles); register(m_categoryFiles);
register(m_domainMappings); register(m_domainMappings);
register(m_ddenums);
} }
public void run(final ScriptContext ctx) { public void run(final ScriptContext ctx) {
/* Create site specific custom applications instances of arbitrary /* Create site specific custom applications instances of arbitrary
@ -149,25 +147,25 @@ public class Loader extends PackageLoader {
* navigation tree(s) or additional content sections. * navigation tree(s) or additional content sections.
*/ */
String[] customApplicationInstances = (String[]) get(m_customApplicationInstances); String[] customApplicationInstances = (String[]) get(m_customApplicationInstances);
if ( customApplicationInstances != null) { if (customApplicationInstances != null) {
for (int i = 0 ; i < customApplicationInstances.length ; i++) { for (int i = 0; i < customApplicationInstances.length; i++) {
final String aCustomApplicationInstance = customApplicationInstances[i]; final String aCustomApplicationInstance = customApplicationInstances[i];
StringTokenizer tok = new StringTokenizer( aCustomApplicationInstance, ":" ); StringTokenizer tok = new StringTokenizer(aCustomApplicationInstance, ":");
String type = null; // full qualified class name String type = null; // full qualified class name
String url = null; // url fragment (last part) String url = null; // url fragment (last part)
String title = null; // title of new application instance String title = null; // title of new application instance
String parent = null; // parent class name String parent = null; // parent class name
for ( int j = 0; tok.hasMoreTokens(); j++ ) { for (int j = 0; tok.hasMoreTokens(); j++) {
if ( 0 == j ) { if (0 == j) {
type = tok.nextToken(); type = tok.nextToken();
} else if ( 1 == j ) { } else if (1 == j) {
url = tok.nextToken(); url = tok.nextToken();
} else if ( 2 == j ) { } else if (2 == j) {
title = tok.nextToken(); title = tok.nextToken();
} else if ( 3 == j ) { } else if (3 == j) {
parent = tok.nextToken(); parent = tok.nextToken();
} else { } else {
parent = null; parent = null;
@ -191,7 +189,7 @@ public class Loader extends PackageLoader {
String[] files = (String[]) get(m_categoryFiles); String[] files = (String[]) get(m_categoryFiles);
final Parser parser = new Parser(); final Parser parser = new Parser();
// for each filename in the array of files containing categories // for each filename in the array of files containing categories
for (int i = 0 ; i < files.length ; i++) { for (int i = 0; i < files.length; i++) {
final String file = files[i]; final String file = files[i];
if (s_log.isInfoEnabled()) { if (s_log.isInfoEnabled()) {
s_log.info("Process " + file); s_log.info("Process " + file);
@ -209,20 +207,20 @@ public class Loader extends PackageLoader {
* existent, i.e. previously importet in the previous step. * existent, i.e. previously importet in the previous step.
*/ */
String[] domainMappings = (String[]) get(m_domainMappings); String[] domainMappings = (String[]) get(m_domainMappings);
for (int i = 0 ; i < domainMappings.length ; i++) { for (int i = 0; i < domainMappings.length; i++) {
final String aDomainMapping = domainMappings[i]; final String aDomainMapping = domainMappings[i];
StringTokenizer tok = new StringTokenizer( aDomainMapping, ":" ); StringTokenizer tok = new StringTokenizer(aDomainMapping, ":");
String key = null; String key = null;
String app = null; String app = null;
String context = null; String context = null;
for ( int j = 0; tok.hasMoreTokens(); j++ ) { for (int j = 0; tok.hasMoreTokens(); j++) {
if ( 0 == j ) { if (0 == j) {
key = tok.nextToken(); key = tok.nextToken();
} else if ( 1 == j ) { } else if (1 == j) {
app = tok.nextToken(); app = tok.nextToken();
} else if ( 2 == j ) { } else if (2 == j) {
context = tok.nextToken(); context = tok.nextToken();
} else { } else {
context = null; context = null;
@ -233,11 +231,14 @@ public class Loader extends PackageLoader {
} }
// registerServicesTemplate("/services/"); wird nicht gebraucht // registerServicesTemplate("/services/"); wird nicht gebraucht
} // end run method final RelationAttributeImportTool ddenumTool = new RelationAttributeImportTool();
for(String ddenum : (String[]) get(m_ddenums)) {
ddenumTool.loadData(ddenum);
}
} // end run method
// public void registerServicesTemplate(String appURL) { // public void registerServicesTemplate(String appURL) {
// Application app = Application.retrieveApplicationForPath(appURL); // Application app = Application.retrieveApplicationForPath(appURL);
@ -255,8 +256,6 @@ public class Loader extends PackageLoader {
// Template.DEFAULT_DISPATCHER_CONTEXT, // Template.DEFAULT_DISPATCHER_CONTEXT,
// Template.DEFAULT_USE_CONTEXT ); // Template.DEFAULT_USE_CONTEXT );
// } // }
/** /**
* Determines the Terms domain using domainKey as well as the application * Determines the Terms domain using domainKey as well as the application
* instance using appURL and then creates a domain mapping using context * instance using appURL and then creates a domain mapping using context
@ -317,4 +316,5 @@ public class Loader extends PackageLoader {
} }
} }
} }
} }