Loading label bundle from XML file for translating the names of ContentTypes.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2764 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2014-07-17 17:26:50 +00:00
parent bca01fc9ee
commit 738ce745d9
10 changed files with 326 additions and 283 deletions

View File

@ -32,6 +32,9 @@ import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.web.Web;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
@ -42,15 +45,22 @@ import java.util.ArrayList;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.StringTokenizer;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* <p>A Content Type defines the characteristics of a content item. Content
* management resources are registered to a content type, including
* the {@link com.arsdigita.cms.AuthoringKit Authoring Kit}, and
* {@link com.arsdigita.cms.Template templates}.</p>
* <p>
* A Content Type defines the characteristics of a content item. Content management resources are
* registered to a content type, including the {@link com.arsdigita.cms.AuthoringKit Authoring Kit},
* and {@link com.arsdigita.cms.Template templates}.</p>
*
* <p>Each content type is associated with a {@link
* <p>
* Each content type is associated with a {@link
* com.arsdigita.domain.DomainObject domain object} and a {@link
* com.arsdigita.persistence.DataObject data object} type.</p>
*
@ -60,26 +70,32 @@ import org.apache.log4j.Logger;
*/
public class ContentType extends ACSObject {
/** Internal logger instance to faciliate debugging. Enable logging output
* by editing /WEB-INF/conf/log4j.properties int hte runtime environment
* and set com.arsdigita.cms.ui.authoring.NewItemForm=DEBUG by uncommenting
* or adding the line. */
/**
* Internal logger instance to faciliate debugging. Enable logging output by editing
* /WEB-INF/conf/log4j.properties int hte runtime environment and set
* com.arsdigita.cms.ui.authoring.NewItemForm=DEBUG by uncommenting or adding the line.
*/
private static final Logger s_log = Logger.getLogger(ContentType.class);
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.ContentType";
/** The path content types are expected to store their type definition
* file (usually [domainObjectBaseName].xml by convention). Any content
* item should use this location unless there are good reasons for a
* different location. */
public static final String CONTENTTYPE_DEFINITIONFILE_PATH =
"/WEB-INF/content-types/";
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.ContentType";
/**
* The path content types are expected to store their type definition file (usually
* [domainObjectBaseName].xml by convention). Any content item should use this location unless
* there are good reasons for a different location.
*/
public static final String CONTENTTYPE_DEFINITIONFILE_PATH = "/WEB-INF/content-types/";
public static final String OBJECT_TYPE = "associatedObjectType";
/** The name or title of the content type, e.g. "File Storage Item" */
/**
* The name or title of the content type, e.g. "File Storage Item"
*/
public static final String LABEL = "label";
/** A short description of the type, what is is meant to do / to use for. */
/**
* A short description of the type, what is is meant to do / to use for.
*/
public static final String DESCRIPTION = "description";
/** Fully qualified name of the (main) domain class (and main entry point)*/
/**
* Fully qualified name of the (main) domain class (and main entry point)
*/
public static final String CLASSNAME = "className";
public static final String MODE = "mode";
public static final String AUTHORING_KIT = "authoringKit";
@ -90,32 +106,31 @@ public class ContentType extends ACSObject {
/**
* Default constructor. This creates a new folder.
**/
*
*/
public ContentType() {
super(BASE_DATA_OBJECT_TYPE);
}
/**
* Constructor. The contained <code>DataObject</code> is retrieved
* from the persistent storage mechanism with an <code>OID</code>
* specified by <i>oid</i>.
* Constructor. The contained <code>DataObject</code> is retrieved from the persistent storage
* mechanism with an <code>OID</code> specified by <i>oid</i>.
*
* @param oid The <code>OID</code> for the retrieved
* <code>DataObject</code>.
**/
* @param oid The <code>OID</code> for the retrieved <code>DataObject</code>.
*
*/
public ContentType(OID oid) throws DataObjectNotFoundException {
super(oid);
}
/**
* Constructor. The contained <code>DataObject</code> is retrieved
* from the persistent storage mechanism with an <code>OID</code>
* specified by <i>id</i> and
* Constructor. The contained <code>DataObject</code> is retrieved from the persistent storage
* mechanism with an <code>OID</code> specified by <i>id</i> and
* <code>ContentType.BASE_DATA_OBJECT_TYPE</code>.
*
* @param id The <code>id</code> for the retrieved
* <code>DataObject</code>.
**/
* @param id The <code>id</code> for the retrieved <code>DataObject</code>.
*
*/
public ContentType(BigDecimal id) throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, id));
}
@ -129,8 +144,8 @@ public class ContentType extends ACSObject {
}
/**
* @return the base PDL object type for this item. Child classes should
* override this method to return the correct value
* @return the base PDL object type for this item. Child classes should override this method to
* return the correct value
*/
@Override
public String getBaseDataObjectType() {
@ -146,10 +161,9 @@ public class ContentType extends ACSObject {
}
/**
* Returns the object type of the items of this content type. (For example:
* If I create a ContentType "foo". Then a I create an item "bar"
* of type foo. This associated object type is the same as
* bar.getObjectType())
* Returns the object type of the items of this content type. (For example: If I create a
* ContentType "foo". Then a I create an item "bar" of type foo. This associated object type is
* the same as bar.getObjectType())
*
* @return The data object type representation of this content type
*/
@ -165,96 +179,135 @@ public class ContentType extends ACSObject {
public void setAssociatedObjectType(String objType) {
set(OBJECT_TYPE, objType);
}
/**
* Fetches the label for the content type. The label is a globalized
* notation displayed to the user to identify the content type. As an
* example a content type named "Article" (as in getName()) will be
* displayed in an english environment as the label "Article", in
* German as "Artikel", etc.
*
* The label is retrieved from content type's resources. The message uses
* some convention to retrieve the message key and resource bundle.
*
* Client classes may overwrite the method to provide a label from a
* diffrent source.
*
* Fetches the label for the content type. The label is a globalized notation displayed to the
* user to identify the content type. As an example a content type named "Article" (as in
* getName()) will be displayed in an english environment as the label "Article", in German as
* "Artikel", etc.
*
* The label is retrieved from content type's resources. The message uses some convention to
* retrieve the message key and resource bundle.
*
* Client classes may overwrite the method to provide a label from a different source.
*
* @return The (globalized) label.
*/
public GlobalizedMessage getLabel() {
GlobalizedMessage label; // the the type's label to return
// We assume the name of the ObjectType is the base for various
// resources we need so we determine it first.
String objectTypeName = getAssociatedObjectType();
if (s_log.isDebugEnabled()) {
s_log.debug(
"Object Type is " + objectTypeName );
}
String objectTypeName = getAssociatedObjectType();
if (s_log.isDebugEnabled()) {
s_log.debug(
"Object Type is " + objectTypeName);
}
// First we'll try to locate the resource file assuming it is named
// as the object type with resources.properties appended.
String bundleResourcePath = "/".concat(objectTypeName.replace(".","/"))
.concat("Resources.properties");
if (s_log.isDebugEnabled()) {
s_log.debug("resource path is " + bundleResourcePath );
}
String bundleResourcePath = "/".concat(objectTypeName.replace(".", "/"))
.concat("Resources.properties");
if (s_log.isDebugEnabled()) {
s_log.debug("resource path is " + bundleResourcePath);
}
// Alternatively we may try the content item's definition file. Just
// guessing its name here.
String typeResourcePath = CONTENTTYPE_DEFINITIONFILE_PATH
.concat(objectTypeName.replace(".","/"))
.concat(".xml");
String typeResourcePath = CONTENTTYPE_DEFINITIONFILE_PATH
.concat(objectTypeName.replace(".", "/"))
.concat(".xml");
// We assume the name of the key in resource bundle is the same as
// the ObjectType minus the domain part ("com.arsdigita.")
// and starting with "cms" and suffix ".type_label" appended
String labelKey = objectTypeName.substring(objectTypeName.indexOf("cms"))
.concat(".type_label")
.toLowerCase();
.concat(".type_label")
.toLowerCase();
// First try: check, if the resource file really exists, and if it does,
// use it.
if (this.getClass().getClassLoader().getResource(bundleResourcePath)!=null) {
if (this.getClass().getClassLoader().getResource(bundleResourcePath) != null) {
// Property file exists, use it!
String bundleName = objectTypeName.concat("Resources");
final String bundleName = objectTypeName.concat("Resources");
// Create the globalized label
label = new GlobalizedMessage(labelKey, bundleName);
} else {
// No property file found, try to use the item's definition file
if (this.getClass().getClassLoader()
.getResource(typeResourcePath)!=null) {
// item definition file found. use it's
// determine the bundle from attribute "descriptionBundle"
// which should provide an item specific description (but
// unfortunately due to lazy programmers not always does).
// As a proper example:
// /WEB-INF/content-types/com.arsditita.cms.contenttypes.Event.xml
String bundleName = "REPLACE ME"; // REPLACE ME!
final InputStream defFile = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(typeResourcePath);
label = new GlobalizedMessage(labelKey, bundleName);
} else {
// No property file found, try to use the item's definition file
if (defFile == null) {
// Giving up!
// As a fall back use the (not globalized) "name" of the type as
// stored in the database to display the type to the user. Is is
// used as the "key" in a GloablizedMessage, which it is definitely
// not. But GlobalizedMessage displays the key if it could not be
// found in a resource file.
label = new GlobalizedMessage(getName());
} else {
// item definition file found. use it's
// determine the bundle from attribute "descriptionBundle"
// which should provide an item specific description (but
// unfortunately due to lazy programmers not always does).
// As a proper example:
// /WEB-INF/content-types/com.arsditita.cms.contenttypes.Event.xml
try {
final SAXParserFactory parserFactory = SAXParserFactory.newInstance();
final SAXParser parser = parserFactory.newSAXParser();
final BundleName bundleName = new BundleName();
parser.parse(defFile, bundleName);
//String bundleName = "REPLACE ME"; // REPLACE ME!
if (bundleName.getName() == null) {
return new GlobalizedMessage(getName());
} else {
label = new GlobalizedMessage(labelKey, bundleName.getName());
}
} catch (ParserConfigurationException ex) {
label = new GlobalizedMessage(getName());
} catch (SAXException ex) {
label = new GlobalizedMessage(getName());
} catch (IOException ex) {
label = new GlobalizedMessage(getName());
}
}
}
return label;
}
private class BundleName extends DefaultHandler {
private String name;
public BundleName() {
//Nothing
}
public String getName() {
return name;
}
@Override
public void startElement(final String namespaceURI,
final String localName,
final String qName,
final Attributes attributes) {
if ("ctd:authoring-step".equals(qName)) {
name = attributes.getValue("labelBundle");
}
}
}
/**
* Fetches the name for the content type. The name is a fixed String, which
* 'names' a content type and is not localizible. It is stored in the
* database and a symbolic name for the formal ID. It may contain any
* characters but is preferable an english term. Examples are "FAQ item" or
* "Article" or "Multipart Article". It has to be unique system-wide.
* Fetches the name for the content type. The name is a fixed String, which 'names' a content
* type and is not localizible. It is stored in the database and a symbolic name for the formal
* ID. It may contain any characters but is preferable an english term. Examples are "FAQ item"
* or "Article" or "Multipart Article". It has to be unique system-wide.
*
* @return The name (ie. may be used as a non-localized label)
*/
@ -264,11 +317,11 @@ public class ContentType extends ACSObject {
/**
* Sets the name for this content type. The name is a fixed String.
*
* @see getName() for additional details.
*
* The name is stored in the database. In the database this property is
* stored under 'label', when globliation was not an issue.
* The Method is primarly used in the initial loading step.
*
* The name is stored in the database. In the database this property is stored under 'label',
* when globliation was not an issue. The Method is primarly used in the initial loading step.
*
* @param name The name
*/
@ -313,36 +366,32 @@ public class ContentType extends ACSObject {
}
/**
* <p>An internal content type is one that is not user-defined and maintained
* internally. A content type should be made internal under the following
* two conditions:</p>
* <p>
* An internal content type is one that is not user-defined and maintained internally. A content
* type should be made internal under the following two conditions:</p>
*
* <ol>
* <li>The object type needs to take advantage of content type services
* (i.e., versioning, categorization, lifecycle, workflow) that are
* already implemented in CMS.</li>
* <li>The content type cannot be explicitly registered to a content
* section.</li>
* <li>The object type needs to take advantage of content type services (i.e., versioning,
* categorization, lifecycle, workflow) that are already implemented in CMS.</li>
* <li>The content type cannot be explicitly registered to a content section.</li>
* </ol>
*
* <p>The {@link com.arsdigita.cms.Template} content type is one such
* internal content type.</p>
* <p>
* The {@link com.arsdigita.cms.Template} content type is one such internal content type.</p>
*
* @return Boolean.TRUE if this content type is internal, Boolean.FALSE
* otherwise.
* @return Boolean.TRUE if this content type is internal, Boolean.FALSE otherwise.
*/
public Boolean isInternal() {
return "I".equalsIgnoreCase((String) get(MODE));
}
/**
* <p>A hidden content type is one that is not user-defined but not meant
* to be used directly (p. ex. GenericArticle). in contrast they provide
* some basic features for different kind of content type to be extended
* from. Also, they are legit perents for UDCTs.
* <p>
* A hidden content type is one that is not user-defined but not meant to be used directly (p.
* ex. GenericArticle). in contrast they provide some basic features for different kind of
* content type to be extended from. Also, they are legit perents for UDCTs.
*
* @return Boolean.TRUE if this content type is internal, Boolean.FALSE
* otherwise.
* @return Boolean.TRUE if this content type is internal, Boolean.FALSE otherwise.
*/
public Boolean isHidden() {
return "H".equalsIgnoreCase((String) get(MODE));
@ -380,21 +429,18 @@ public class ContentType extends ACSObject {
}
/**
* Create an authoring kit to this content type. To save this authoring
* kit, you need to call <code>save()</code> method on the
* returned AuthoringKit.
* Create an authoring kit to this content type. To save this authoring kit, you need to call
* <code>save()</code> method on the returned AuthoringKit.
*/
public AuthoringKit createAuthoringKit() {
return createAuthoringKit(null);
}
/**
* Create an authoring kit to this content type. To save this authoring
* kit, you need to call <code>save()</code> method on the
* returned AuthoringKit.
* Create an authoring kit to this content type. To save this authoring kit, you need to call
* <code>save()</code> method on the returned AuthoringKit.
*
* @param createComponent the create component class associated with
* the authoring kit
* @param createComponent the create component class associated with the authoring kit
*/
public AuthoringKit createAuthoringKit(String createComponent) {
@ -407,27 +453,25 @@ public class ContentType extends ACSObject {
return kit;
} else {
throw new RuntimeException(
"An AuthorigKit exists for this ContentType.");
"An AuthorigKit exists for this ContentType.");
}
}
/**
* Fetch the item creation form id of the Java domain object implementation.
* applies to user-defined types
* Fetch the item creation form id of the Java domain object implementation. applies to
* user-defined types
*
* @return The id of the persistent form used to create an item
* of this content type
* @return The id of the persistent form used to create an item of this content type
*/
public BigDecimal getItemFormID() {
return (BigDecimal) get(ITEM_FORM_ID);
}
/**
* Sets the item creation form id of the Java domain object implementation.
* applies to user-defined types
* Sets the item creation form id of the Java domain object implementation. applies to
* user-defined types
*
* @param itemFormID The id of the persistent form used to create an item
* of this content type
* @param itemFormID The id of the persistent form used to create an item of this content type
*/
public void setItemFormID(BigDecimal itemFormID) {
set(ITEM_FORM_ID, itemFormID);
@ -436,8 +480,8 @@ public class ContentType extends ACSObject {
/**
* Retrieve the persistent form of this content type
*
* @return the persistent form used to create or edit content items
* of this type (only applies to user-defined types)
* @return the persistent form used to create or edit content items of this type (only applies
* to user-defined types)
*/
public PersistentForm getItemForm() throws DataObjectNotFoundException {
@ -452,7 +496,7 @@ public class ContentType extends ACSObject {
/**
* Add an ancestor to the list of descendants, if not already in the list.
*
*
* @param newAncestor ID of the ancestor to add
*/
public void addAncestor(BigDecimal newAncestor) {
@ -478,7 +522,7 @@ public class ContentType extends ACSObject {
/**
* Remove an ancestor id from the list of descendants.
*
*
* @param ancestor ID to be removed
*/
public void delAncestor(BigDecimal ancestor) {
@ -506,7 +550,7 @@ public class ContentType extends ACSObject {
/**
* Get the list of ancestors.
*
*
* @return
*/
public String getAncestors() {
@ -515,7 +559,7 @@ public class ContentType extends ACSObject {
/**
* Add a descendant to the list of descendants, if not already in list.
*
*
* @param newDescendant ID of the descendant to add
*/
public void addDescendants(BigDecimal newDescendant) {
@ -523,7 +567,7 @@ public class ContentType extends ACSObject {
if (getID().equals(newDescendant)) {
return;
}
// Get the list of descendants from db
String descendants = (String) get(DESCENDANTS);
@ -547,6 +591,7 @@ public class ContentType extends ACSObject {
/**
* Get the list of descendants
*
* @return
*/
public String getDescendants() {
@ -555,6 +600,7 @@ public class ContentType extends ACSObject {
/**
* Remove a descendant from the list of descendants
*
* @param descendant ID to be removed
*/
public void delDescendants(BigDecimal descendant) {
@ -585,36 +631,35 @@ public class ContentType extends ACSObject {
// Fetching/Finding content types.
//
//////////////////////////////////////
/**
* Find the content type with the associated with the object type.
*
* @param objType The fully-qualified name of the data object type
*
* @return The content type associated with the object type
*/
public static ContentType findByAssociatedObjectType(String objType)
throws DataObjectNotFoundException {
throws DataObjectNotFoundException {
ContentTypeCollection types = getAllContentTypes();
types.addFilter("associatedObjectType = :type").set("type", objType);
if (types.next()) {
ContentType type = types.getContentType();
types.close();
return type;
} else {
// no match
types.close();
throw new DataObjectNotFoundException(
"No matching content type for object type " + objType);
"No matching content type for object type " + objType);
}
}
/**
* Fetches a collection of all content types, including internal content
* types.
* Fetches a collection of all content types, including internal content types.
*
* @return A collection of all content types
*/
@ -623,11 +668,10 @@ public class ContentType extends ACSObject {
}
/**
* Fetches a collection of all content types, including internal content
* types.
* Fetches a collection of all content types, including internal content types.
*
* @param hidden If false, fetch all content types, ecluding hidden content types
*
* @param hidden If false, fetch all content types, ecluding hidden
* content types
* @return A collection of all content types
*/
public static ContentTypeCollection getAllContentTypes(boolean hidden) {
@ -644,10 +688,8 @@ public class ContentType extends ACSObject {
}
/**
* @param internal If false, fetch all content types, excluding internal
* content types.
* @param hidden If false, fetch all content types, excluding hidden
* content types.
* @param internal If false, fetch all content types, excluding internal content types.
* @param hidden If false, fetch all content types, excluding hidden content types.
*/
private static ContentTypeCollection getAllContentTypes(boolean internal, boolean hidden) {
DataCollection da = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
@ -664,8 +706,8 @@ public class ContentType extends ACSObject {
}
/**
* Fetches a collection of content types that have been registered
* to at least one content section, excluding internal content types.
* Fetches a collection of content types that have been registered to at least one content
* section, excluding internal content types.
*
* @return A collection of registered content types
*/
@ -677,9 +719,10 @@ public class ContentType extends ACSObject {
}
/**
*
*
* @param ct
* @return
*
* @return
*/
public static ContentTypeCollection getDescendantsOf(ContentType ct) {
ContentTypeCollection ctc = ContentType.getRegisteredContentTypes();
@ -706,13 +749,12 @@ public class ContentType extends ACSObject {
ctc.addFilter(or);
return ctc;
}
private static List s_xsl = new ArrayList();
/**
* Registers an XSL file against a content type.
* NB this interface is liable to change.
*
* Registers an XSL file against a content type. NB this interface is liable to change.
*
* @param type the content type
* @param path the path relative to the server root
*/
@ -721,29 +763,27 @@ public class ContentType extends ACSObject {
}
/**
* Unregisters an XSL file against a content type.
* NB this interface is liable to change.
*
* Unregisters an XSL file against a content type. NB this interface is liable to change.
*
* @param type the content type
* @param path the path relative to the server root
*/
public static void unregisterXSLFile(ContentType type,
String path) {
String path) {
s_xsl.remove(new XSLEntry(type, path));
}
/**
* Gets an iterator of java.net.URL objects for
* all registered XSL files.
*
* @return
* Gets an iterator of java.net.URL objects for all registered XSL files.
*
* @return
*/
public static Iterator getXSLFileURLs() {
return new EntryIterator(s_xsl.iterator());
}
/**
*
*
*/
private static class EntryIterator implements Iterator {
@ -765,9 +805,9 @@ public class ContentType extends ACSObject {
try {
return new URL(Web.getConfig().getDefaultScheme(),
Web.getConfig().getHost().getName(),
Web.getConfig().getHost().getPort(),
path);
Web.getConfig().getHost().getName(),
Web.getConfig().getHost().getPort(),
path);
} catch (MalformedURLException ex) {
throw new UncheckedWrapperException("path malformed" + path, ex);
}
@ -777,10 +817,11 @@ public class ContentType extends ACSObject {
public void remove() {
m_inner.remove();
}
}
/**
*
*
*/
private static class XSLEntry {
@ -788,7 +829,7 @@ public class ContentType extends ACSObject {
private final String m_path;
public XSLEntry(ContentType type,
String path) {
String path) {
m_type = type;
m_path = path;
}
@ -808,12 +849,14 @@ public class ContentType extends ACSObject {
}
XSLEntry e = (XSLEntry) o;
return m_path.equals(e.m_path)
&& m_type.equals(e.m_type);
&& m_type.equals(e.m_type);
}
@Override
public int hashCode() {
return m_path.hashCode() + m_type.hashCode();
}
}
}

View File

@ -4,27 +4,27 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="SciPublications/ArticleInCollectedVolume"
description="Base type for articleInCollectedVolumes"
objectType="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume"
classname="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume">
<ctd:content-type
label="SciPublications/ArticleInCollectedVolume"
description="Base type for articleInCollectedVolumes"
objectType="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume"
classname="com.arsdigita.cms.contenttypes.ArticleInCollectedVolume">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.ArticleInCollectedVolumeCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.ArticleInCollectedVolumeCreate">
<ctd:authoring-step
labelKey="publications.ui.articleInCollectedVolume_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.Publication.Resources"
descriptionKey="publications.ui.articleInCollectedVolume.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.ArticleInCollectedVolumePropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="publications.ui.articleInCollectedVolume_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.articleInCollectedVolume.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.ArticleInCollectedVolumePropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -4,27 +4,27 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="SciPublications/ArticleInJournal"
description="Base type for articleInJournals"
objectType="com.arsdigita.cms.contenttypes.ArticleInJournal"
classname="com.arsdigita.cms.contenttypes.ArticleInJournal">
<ctd:content-type
label="SciPublications/ArticleInJournal"
description="Base type for articleInJournals"
objectType="com.arsdigita.cms.contenttypes.ArticleInJournal"
classname="com.arsdigita.cms.contenttypes.ArticleInJournal">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.ArticleInJournalCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.ArticleInJournalCreate">
<ctd:authoring-step
labelKey="publications.ui.articleInJournal_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.articleInJournal.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.ArticleInJournalPropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="publications.ui.articleInJournal_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.articleInJournal.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.ArticleInJournalPropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -14,7 +14,7 @@
<ctd:authoring-step
labelKey="publications.ui.journal_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationResources"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.journal.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationResources"
component="com.arsdigita.cms.contenttypes.ui.JournalPropertiesStep"

View File

@ -3,32 +3,32 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type label="SciPublications/Author"
description="Author of a publication"
objectType="com.arsdigita.cms.contenttypes.SciAuthor"
classname="com.arsdigita.cms.contenttypes.SciAuthor">
<ctd:content-type label="SciPublications/Author"
description="Author of a publication"
objectType="com.arsdigita.cms.contenttypes.SciAuthor"
classname="com.arsdigita.cms.contenttypes.SciAuthor">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.GenericPersonCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.GenericPersonCreate">
<ctd:authoring-step labelKey="cms.contenttypes.shared.basic_properties.title"
labelBundle="com.arsdigita.cms.CMSResources"
descriptionKey="cms.contenttypes.shared.basic_properties.description"
descriptionBundle="com.arsdigita.cms.CMSResources"
component="com.arsdigita.cms.contenttypes.ui.SciAuthorPropertiesStep"
ordering="1"/>
<ctd:authoring-step labelKey="cms.contenttypes.shared.basic_properties.title"
labelBundle="com.arsdigita.cms.CMSResources"
descriptionKey="cms.contenttypes.shared.basic_properties.description"
descriptionBundle="com.arsdigita.cms.CMSResources"
component="com.arsdigita.cms.contenttypes.ui.SciAuthorPropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="person.authoring.contact_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.ContenttypesResources"
descriptionKey="person.authoring.contact_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.ContenttypesResources"
component="com.arsdigita.cms.contenttypes.ui.GenericPersonContactPropertiesStep"
ordering="2"/>
<ctd:authoring-step
labelKey="person.authoring.contact_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.ContenttypesResources"
descriptionKey="person.authoring.contact_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.ContenttypesResources"
component="com.arsdigita.cms.contenttypes.ui.GenericPersonContactPropertiesStep"
ordering="2"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -4,27 +4,27 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="SciPublications/Series"
description="Base type for seriess"
objectType="com.arsdigita.cms.contenttypes.Series"
classname="com.arsdigita.cms.contenttypes.Series">
<ctd:content-type
label="SciPublications/Series"
description="Base type for seriess"
objectType="com.arsdigita.cms.contenttypes.Series"
classname="com.arsdigita.cms.contenttypes.Series">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.SeriesCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.SeriesCreate">
<ctd:authoring-step
labelKey="publications.ui.series_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.series.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.SeriesPropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="publications.ui.series_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.series.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.SeriesPropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -4,28 +4,28 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="SciPublications/UnPublished"
description="Base type for unPublisheds"
objectType="com.arsdigita.cms.contenttypes.UnPublished"
classname="com.arsdigita.cms.contenttypes.UnPublished"
mode="hidden">
<ctd:content-type
label="SciPublications/UnPublished"
description="Base type for unPublisheds"
objectType="com.arsdigita.cms.contenttypes.UnPublished"
classname="com.arsdigita.cms.contenttypes.UnPublished"
mode="hidden">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.UnPublishedCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.UnPublishedCreate">
<ctd:authoring-step
labelKey="publications.ui.unPublished_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.unPublished.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.UnPublishedPropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="publications.ui.unPublished_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.unPublished.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.UnPublishedPropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -4,27 +4,27 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.redhat.com/cms/content-types content-types.xsd">
<ctd:content-type
label="SciPublications/WorkingPaper"
description="Base type for workingPapers"
objectType="com.arsdigita.cms.contenttypes.WorkingPaper"
classname="com.arsdigita.cms.contenttypes.WorkingPaper">
<ctd:content-type
label="SciPublications/WorkingPaper"
description="Base type for workingPapers"
objectType="com.arsdigita.cms.contenttypes.WorkingPaper"
classname="com.arsdigita.cms.contenttypes.WorkingPaper">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.UnPublishedCreate">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.UnPublishedCreate">
<ctd:authoring-step
labelKey="publications.ui.workingPaper_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.workingPaper.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.WorkingPaperPropertiesStep"
ordering="1"/>
<ctd:authoring-step
labelKey="publications.ui.workingPaper_properties.title"
labelBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
descriptionKey="publications.ui.workingPaper.basic_properties.description"
descriptionBundle="com.arsdigita.cms.contenttypes.PublicationsResources"
component="com.arsdigita.cms.contenttypes.ui.WorkingPaperPropertiesStep"
ordering="1"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
<ctd:include href="/WEB-INF/content-types/assign-categories-step.xml"/>
</ctd:authoring-kit>
</ctd:authoring-kit>
</ctd:content-type>
</ctd:content-type>
</ctd:content-types>

View File

@ -417,9 +417,9 @@ publications.ui.publication.language=Language of publication
publications.ui.series.number=Volume of series
person.ui.publications.header=Publications with {0} as author
person.ui.publications.header.alias_of=(Alias of {0})
cms.contenttypes.ArticleInCollectedVolume.type_label=Publication / Article in Collected Volume
cms.contenttypes.ArticleInJournal.type_label=Publication / Article in Journal
cms.contenttypes.CollectedVolume.type_label=Publication / Collected Volume
cms.contenttypes.articleincollectedvolume.type_label=Publication / Article in Collected Volume
cms.contenttypes.articleinjournal.type_label=Publication / Article in Journal
cms.contenttypes.collectedvolume.type_label=Publication / Collected Volume
cms.contenttypes.Expertise.type_label=Publication / Expertise
cms.contenttypes.GreyLiterature.type_label=Publication / Grey Literature
cms.contenttypes.InProceedings.type_label=Publication / In Proceedings

View File

@ -416,9 +416,9 @@ publications.ui.publication.language=Sprache der Publikation
publications.ui.series.number=Band der Reihe
person.ui.publications.header=Publikationen mit {0} als Autorin/Autor
person.ui.publications.header.alias_of=\ (Alias von {0})
cms.contenttypes.ArticleInCollectedVolume.type_label=Publkation / Sammelbandbeitrag
cms.contenttypes.ArticleInJournal.type_label=Publikation / Zeitschriftenbeitrag
cms.contenttypes.CollectedVolume.type_label=Publication / Collected Volume
cms.contenttypes.articleincollectedvolume.type_label=Publikation / Sammelbandbeitrag
cms.contenttypes.articleinjournal.type_label=Publikation / Zeitschriftenbeitrag
cms.contenttypes.collectedvolume.type_label=Publication / Collected Volume
cms.contenttypes.Expertise.type_label=Publikation / Gutachten
cms.contenttypes.GreyLiterature.type_label=Publikation / Graue Literatur
cms.contenttypes.InProceedings.type_label=Publikation / Beitrag in Tagungsband