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"
name="ccm-cms"
prettyName="Red Hat CCM Content Management System"
version="6.6.8"
version="6.6.9"
release="1"
webapp="ROOT">
<ccm:dependencies>

View File

@ -21,9 +21,9 @@ model com.arsdigita.cms;
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] attr_key = cms_relation_attribute.attr_key VARCHAR(100);
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);
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 -->
<script class="com.arsdigita.cms.upgrade.PersonsStrColumn"/>
</version>
<version from="6.6.8" to="6.6.9">
<!-- Make RelationAttribute SubClass of ACSObject -->
<script class="com.arsdigita.cms.upgrade.RelationAttributeACSObject"/>
</version>
</upgrade>

View File

@ -108,10 +108,9 @@ public class Initializer extends CompoundInitializer {
s_log.debug("CMS.Initializer.(Constructor) invoked");
add(new PDLInitializer(new ManifestSource("ccm-cms.pdl.mf",
new NameFilter(DbHelper
.getDatabaseSuffix(database),
"pdl")))
);
new NameFilter(DbHelper
.getDatabaseSuffix(database),
"pdl"))));
add(new com.arsdigita.cms.contentsection.Initializer());
add(new com.arsdigita.cms.publishToFile.Initializer());
@ -165,36 +164,36 @@ public class Initializer extends CompoundInitializer {
URLService.registerFinder(
Link.BASE_DATA_OBJECT_TYPE,
new URLFinder() {
public String find(OID oid, String context)
throws NoValidURLException {
public String find(OID oid, String context)
throws NoValidURLException {
return find(oid);
return find(oid);
}
public String find(OID oid)
throws NoValidURLException {
Link link;
try {
link = (Link) DomainObjectFactory.newInstance(oid);
} catch (DataObjectNotFoundException ex) {
throw new NoValidURLException("Cannot find an object with oid: " + oid);
}
if (Link.EXTERNAL_LINK.equals(link.getTargetType())) {
return link.getTargetURI();
} else {
ContentItem target = link.getTargetItem();
try {
return URLService.locate(target.getOID());
} catch (URLFinderNotFoundException ex) {
throw new UncheckedWrapperException(ex);
}
}
}
public String find(OID oid)
throws NoValidURLException {
Link link;
try {
link = (Link) DomainObjectFactory.newInstance(oid);
} catch (DataObjectNotFoundException ex) {
throw new NoValidURLException("Cannot find an object with oid: " + oid);
}
if (Link.EXTERNAL_LINK.equals(link.getTargetType())) {
return link.getTargetURI();
} else {
ContentItem target = link.getTargetItem();
try {
return URLService.locate(target.getOID());
} catch (URLFinderNotFoundException ex) {
throw new UncheckedWrapperException(ex);
}
}
}
});
});
ImageSizerFactory.initialize();
registerInstantiators(e.getFactory());
@ -210,7 +209,7 @@ public class Initializer extends CompoundInitializer {
final String workspaceURL = CMS.WORKSPACE_PACKAGE_KEY;
final String contentCenterMap = s_conf.getContentCenterMap();
ContentCenterSetup workspaceSetup = new ContentCenterSetup(workspaceURL,
contentCenterMap);
contentCenterMap);
workspaceSetup.run();
// register item adapters
@ -315,24 +314,33 @@ 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() {
QueryEngineRegistry.registerEngine(IndexerType.LUCENE,
new FilterType[]{
new CategoryFilterType(),
new ContentSectionFilterType(),
new CMSContentSectionFilterType(),
new ContentTypeFilterType(),
new CreationDateFilterType(),
new CreationUserFilterType(),
new LastModifiedDateFilterType(),
new LastModifiedUserFilterType(),
new ObjectTypeFilterType(),
new PermissionFilterType(),
new VersionFilterType()
},
new CategoryFilterType(),
new ContentSectionFilterType(),
new CMSContentSectionFilterType(),
new ContentTypeFilterType(),
new CreationDateFilterType(),
new CreationUserFilterType(),
new LastModifiedDateFilterType(),
new LastModifiedUserFilterType(),
new ObjectTypeFilterType(),
new PermissionFilterType(),
new VersionFilterType()
},
new LuceneQueryEngine());
}
@ -340,19 +348,19 @@ public class Initializer extends CompoundInitializer {
QueryEngineRegistry.registerEngine(IndexerType.INTERMEDIA,
new FilterType[]{
new CategoryFilterType(),
new ContentSectionFilterType(),
new CMSContentSectionFilterType(),
new ContentTypeFilterType(),
new CreationDateFilterType(),
new CreationUserFilterType(),
new LastModifiedDateFilterType(),
new LastModifiedUserFilterType(),
new LaunchDateFilterType(),
new ObjectTypeFilterType(),
new PermissionFilterType(),
new VersionFilterType()
},
new CategoryFilterType(),
new ContentSectionFilterType(),
new CMSContentSectionFilterType(),
new ContentTypeFilterType(),
new CreationDateFilterType(),
new CreationUserFilterType(),
new LastModifiedDateFilterType(),
new LastModifiedUserFilterType(),
new LaunchDateFilterType(),
new ObjectTypeFilterType(),
new PermissionFilterType(),
new VersionFilterType()
},
new IntermediaQueryEngine());
}

View File

@ -6,7 +6,7 @@
package com.arsdigita.cms;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.kernel.ACSObject;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import java.math.BigDecimal;
@ -24,7 +24,7 @@ import java.math.BigDecimal;
*
* @author quasi
*/
public class RelationAttribute extends DomainObject {
public class RelationAttribute extends ACSObject { //extends DomainObject {
public static final String ID = "id";
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;
/**
* 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>
* @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;
import com.arsdigita.categorization.Categorization;
import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.cms.RelationAttributeCollection;
import com.arsdigita.runtime.CompoundInitializer;
import com.arsdigita.runtime.DomainInitEvent;
import com.arsdigita.templating.PatternStylesheetResolver;
@ -60,5 +62,6 @@ public class Initializer extends CompoundInitializer {
// "webapp",
// new WebAppPatternGenerator()
// );
}
}

View File

@ -15,13 +15,12 @@
* 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.bundle;
import com.arsdigita.categorization.Category;
import com.arsdigita.categorization.RootCategoryCollection;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.RelationAttributeImportTool;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.ui.role.RoleFactory;
import com.arsdigita.kernel.Role;
@ -62,8 +61,6 @@ public class Loader extends PackageLoader {
/** Logger instance for debugging */
private static final Logger s_log = Logger.getLogger(Loader.class);
// /////////////////////////////////////////////////////////////////////////////
// Parameter Section
// /////////////////////////////////////////////////////////////////////////////
@ -82,10 +79,8 @@ public class Loader extends PackageLoader {
* "com.arsdigita.navigation.Navigation:local:Local Navigation"
*/
private Parameter m_customApplicationInstances = new StringArrayParameter(
"com.arsdigita.bundle.loader.custom_app_instances",
Parameter.OPTIONAL, null
);
"com.arsdigita.bundle.loader.custom_app_instances",
Parameter.OPTIONAL, null);
/**
* Comma separated list of fully qualified filenames, each file containing
* a set of Terms domain catagories definitions. These form an initial set
@ -94,12 +89,10 @@ public class Loader extends PackageLoader {
* Files are stored as part of the jar, so classloader can find them.
*/
private Parameter m_categoryFiles = new StringArrayParameter(
"com.arsdigita.bundle.loader.category_files",
Parameter.REQUIRED,new String[]{
"bundle/categories/sci-nav-domain-1.00.xml",
"bundle/categories/sci-nav-hierarchy-1.00.xml" }
);
"com.arsdigita.bundle.loader.category_files",
Parameter.REQUIRED, new String[]{
"bundle/categories/sci-nav-domain-1.00.xml",
"bundle/categories/sci-nav-hierarchy-1.00.xml"});
/**
* List of comma separated sets of domain mappings.
* It's the developers / administrators responsibility to ensure all
@ -117,16 +110,21 @@ public class Loader extends PackageLoader {
*
*/
private Parameter m_domainMappings = new StringArrayParameter(
"com.arsdigita.bundle.loader.domain_mappings",
Parameter.REQUIRED,new String[]{ "STD-NAV:/navigation/",
"STD-NAV:/main/",
"STD-NAV:/portal/" }
);
"com.arsdigita.bundle.loader.domain_mappings",
Parameter.REQUIRED, new String[]{"STD-NAV:/navigation/",
"STD-NAV:/main/",
"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
// /////////////////////////////////////////////////////////////////////////////
/**
* Constructor, just registers parameters.
*/
@ -137,10 +135,10 @@ public class Loader extends PackageLoader {
register(m_customApplicationInstances);
register(m_categoryFiles);
register(m_domainMappings);
register(m_ddenums);
}
public void run(final ScriptContext ctx) {
/* Create site specific custom applications instances of arbitrary
@ -149,25 +147,25 @@ public class Loader extends PackageLoader {
* navigation tree(s) or additional content sections.
*/
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];
StringTokenizer tok = new StringTokenizer( aCustomApplicationInstance, ":" );
StringTokenizer tok = new StringTokenizer(aCustomApplicationInstance, ":");
String type = null; // full qualified class name
String url = null; // url fragment (last part)
String title = null; // title of new application instance
String parent = null; // parent class name
for ( int j = 0; tok.hasMoreTokens(); j++ ) {
if ( 0 == j ) {
for (int j = 0; tok.hasMoreTokens(); j++) {
if (0 == j) {
type = tok.nextToken();
} else if ( 1 == j ) {
} else if (1 == j) {
url = tok.nextToken();
} else if ( 2 == j ) {
} else if (2 == j) {
title = tok.nextToken();
} else if ( 3 == j ) {
} else if (3 == j) {
parent = tok.nextToken();
} else {
parent = null;
@ -191,7 +189,7 @@ public class Loader extends PackageLoader {
String[] files = (String[]) get(m_categoryFiles);
final Parser parser = new Parser();
// 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];
if (s_log.isInfoEnabled()) {
s_log.info("Process " + file);
@ -209,20 +207,20 @@ public class Loader extends PackageLoader {
* existent, i.e. previously importet in the previous step.
*/
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];
StringTokenizer tok = new StringTokenizer( aDomainMapping, ":" );
StringTokenizer tok = new StringTokenizer(aDomainMapping, ":");
String key = null;
String app = null;
String context = null;
for ( int j = 0; tok.hasMoreTokens(); j++ ) {
if ( 0 == j ) {
for (int j = 0; tok.hasMoreTokens(); j++) {
if (0 == j) {
key = tok.nextToken();
} else if ( 1 == j ) {
} else if (1 == j) {
app = tok.nextToken();
} else if ( 2 == j ) {
} else if (2 == j) {
context = tok.nextToken();
} else {
context = null;
@ -233,11 +231,14 @@ public class Loader extends PackageLoader {
}
// 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) {
// Application app = Application.retrieveApplicationForPath(appURL);
@ -255,8 +256,6 @@ public class Loader extends PackageLoader {
// Template.DEFAULT_DISPATCHER_CONTEXT,
// Template.DEFAULT_USE_CONTEXT );
// }
/**
* Determines the Terms domain using domainKey as well as the application
* instance using appURL and then creates a domain mapping using context
@ -317,4 +316,5 @@ public class Loader extends PackageLoader {
}
}
}
}