diff --git a/ccm-cms/src/com/arsdigita/cms/ContentItem.java b/ccm-cms/src/com/arsdigita/cms/ContentItem.java
index 6f0e486c3..0dddc4d19 100755
--- a/ccm-cms/src/com/arsdigita/cms/ContentItem.java
+++ b/ccm-cms/src/com/arsdigita/cms/ContentItem.java
@@ -55,6 +55,7 @@ import com.arsdigita.util.Reporter;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.versioning.VersionedACSObject;
import com.arsdigita.versioning.Versions;
+import java.util.logging.Level;
import org.apache.log4j.Logger;
import java.math.BigDecimal;
@@ -67,6 +68,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import java.util.StringTokenizer;
/**
* This class represents a content item.
@@ -200,33 +202,27 @@ import java.util.Set;
*
* @version $Id: ContentItem.java 1621 2007-09-13 12:43:12Z chrisg23 $
*/
-public class ContentItem extends VersionedACSObject implements CustomCopy {
+public class ContentItem extends VersionedACSObject implements CustomCopy, RelationAttribute {
private static final Logger s_log = Logger.getLogger(ContentItem.class);
private static final Logger s_logDenorm = Logger.getLogger(ContentItem.class.getName() + ".Denorm");
-
private static final String MODEL = "com.arsdigita.cms";
private static final String QUERY_PENDING_ITEMS =
- MODEL + ".getPendingSortedByLifecycle";
-
+ MODEL + ".getPendingSortedByLifecycle";
public static final String BASE_DATA_OBJECT_TYPE = MODEL + ".ContentItem";
-
/**
* A state marking the draft or master item corresponding to a
* live or pending version of that item.
*/
public static final String DRAFT = "draft";
-
/**
* A state marking the live version, a copy of the draft item.
*/
- public static final String LIVE = "live";
-
+ public static final String LIVE = "live";
/**
* A state marking the live version, a copy of the draft item.
*/
- public static final String PENDING = "pending";
-
+ public static final String PENDING = "pending";
// Metadata attribute constants
public static final String ANCESTORS = "ancestors";
public static final String PARENT = "parent";
@@ -236,14 +232,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
public static final String NAME = "name";
public static final String LANGUAGE = "language";
public static final String AUDITING = "auditing";
-
public static final String DRAFT_VERSION = "masterVersion";
public static final String VERSIONS = "slaveVersions";
public static final String CONTENT_SECTION = "section";
-
+ private static final String RELATION_ATTRIBUTES = "";
private static final String PUBLISH_LISTENER_CLASS =
- PublishLifecycleListener.class.getName();
-
+ PublishLifecycleListener.class.getName();
private VersionCache m_pending;
private VersionCache m_live;
private boolean m_wasNew;
@@ -253,7 +247,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
/**
* Default constructor. This creates a new content item.
*/
- public ContentItem() {
+ public ContentItem() {
this(BASE_DATA_OBJECT_TYPE);
s_log.debug("Undergoing creation");
@@ -292,7 +286,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @param obj The DataObject with which to create or
* load a content item
*/
- public ContentItem(final DataObject obj) {
+ public ContentItem(final DataObject obj) {
super(obj);
}
@@ -310,21 +304,20 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("Content item " + this + " created with type " + type);
}
}
-
private static DomainObjectObserver s_parentObs =
- new AbstractDomainObjectObserver() {
- public void set(DomainObject dobj, String name,
- Object old, Object newVal) {
- if (PARENT.equals(name)) {
- ContentItem ci = (ContentItem) dobj;
+ new AbstractDomainObjectObserver() {
- if (newVal != null) {
- PermissionService.setContext
- (ci.getOID(), ((DataObject) newVal).getOID());
+ public void set(DomainObject dobj, String name,
+ Object old, Object newVal) {
+ if (PARENT.equals(name)) {
+ ContentItem ci = (ContentItem) dobj;
+
+ if (newVal != null) {
+ PermissionService.setContext(ci.getOID(), ((DataObject) newVal).getOID());
+ }
}
}
- }
- };
+ };
/**
* Called from the base class (DomainObject)
@@ -350,8 +343,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
m_reporter = new Reporter(s_log, this, ContentItem.class);
if (isNew()) {
- s_log.debug(this + " is being newly created; " +
- "marking it as a draft version");
+ s_log.debug(this + " is being newly created; "
+ + "marking it as a draft version");
m_wasNew = true;
@@ -361,8 +354,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
try {
final ContentType type =
- ContentType.findByAssociatedObjectType
- (getSpecificObjectType());
+ ContentType.findByAssociatedObjectType(getSpecificObjectType());
if (s_log.isDebugEnabled()) {
s_log.debug("Set content type for " + this + " to " + type);
@@ -404,7 +396,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
super.set(key, value);
}
-
/**
* For new content items, sets the associated content type if it
* has not been already set.
@@ -423,27 +414,27 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
}
/*
-
- removed cg - object observer sets context based
- on parent whenever parent is updated
-
+
+ removed cg - object observer sets context based
+ on parent whenever parent is updated
+
protected void afterSave() {
- super.afterSave();
- s_log.info("******After Save of object " + getOID());
- // Set the object's context to its parent object for
- // permissioning.
- if (m_wasNew) {
- final ACSObject parent = getParent();
- if (parent == null) {
- s_log.info("parent is null - set context to content section");
- PermissionService.setContext(this, getContentSection());
- } else {
- s_log.info("parent is " + parent.getOID());
- PermissionService.setContext(this, parent);
- }
- }
+ super.afterSave();
+ s_log.info("******After Save of object " + getOID());
+ // Set the object's context to its parent object for
+ // permissioning.
+ if (m_wasNew) {
+ final ACSObject parent = getParent();
+ if (parent == null) {
+ s_log.info("parent is null - set context to content section");
+ PermissionService.setContext(this, getContentSection());
+ } else {
+ s_log.info("parent is " + parent.getOID());
+ PermissionService.setContext(this, parent);
}
- */
+ }
+ }
+ */
private void setDefaultContentSection() {
s_log.debug("Setting the default content section");
@@ -458,12 +449,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (parent != null && parent instanceof Folder) {
setContentSection(((ContentItem) parent).getContentSection());
} else {
- s_log.debug("The item's parent is not a folder; I am " +
- "not setting the default content section");
+ s_log.debug("The item's parent is not a folder; I am "
+ + "not setting the default content section");
}
} else {
- s_log.debug("The item's version is null or it is not draft; " +
- "doing nothing");
+ s_log.debug("The item's version is null or it is not draft; "
+ + "doing nothing");
}
}
@@ -503,8 +494,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Get the parent object.
*/
public ACSObject getParent() {
- return (ACSObject) DomainObjectFactory.
- newInstance((DataObject) get(PARENT));
+ return (ACSObject) DomainObjectFactory.newInstance((DataObject) get(PARENT));
}
/**
@@ -524,7 +514,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/
public final ItemCollection getChildren() {
final DataAssociationCursor cursor =
- ((DataAssociation) super.get(CHILDREN)).cursor();
+ ((DataAssociation) super.get(CHILDREN)).cursor();
return new ItemCollection(cursor);
}
@@ -580,8 +570,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return The content section to which this item belongs
*/
public ContentSection getContentSection() {
- return (ContentSection) DomainObjectFactory.newInstance
- ((DataObject) get(CONTENT_SECTION));
+ return (ContentSection) DomainObjectFactory.newInstance((DataObject) get(CONTENT_SECTION));
}
/**
@@ -628,7 +617,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
coll.next();
s_log.debug("Get item path not jsp");
boolean first = true;
- while ( coll.next()) {
+ while (coll.next()) {
if (!first) {
result.append('/');
} else {
@@ -677,10 +666,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return the items on the path to the root folder.
*/
public ItemCollection getPathInfo(boolean includeSelf) {
- DataCollection collection = SessionManager.getSession().retrieve
- (BASE_DATA_OBJECT_TYPE);
+ DataCollection collection = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
- String ids = (String)get(ANCESTORS);
+ String ids = (String) get(ANCESTORS);
if (ids == null) {
// this should not happen
if (includeSelf) {
@@ -699,9 +687,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//add list of ancestors split by "/" character
ArrayList ancestors = new ArrayList();
int iIndex = 0;
- for (int i=ids.indexOf("/",0); i != -1; i = ids.indexOf("/", iIndex)) {
- ancestors.add(ids.substring(0,i+1));
- iIndex = i+1;
+ for (int i = ids.indexOf("/", 0); i != -1; i = ids.indexOf("/", iIndex)) {
+ ancestors.add(ids.substring(0, i + 1));
+ iIndex = i + 1;
}
Filter filter = collection.addFilter(ANCESTORS + " in :ancestors");
@@ -718,7 +706,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Methods for accessing and linking content item versions
//
-
/**
* Gets the version tag.
*/
@@ -820,7 +807,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
ItemCollection versions = getPendingVersions();
try {
- if ( versions.next() ) {
+ if (versions.next()) {
return versions.getContentItem();
}
return null;
@@ -838,13 +825,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/
public ItemCollection getPendingVersions() {
if (s_log.isDebugEnabled()) {
- s_log.debug("getPendingVersions: " +getOID());
+ s_log.debug("getPendingVersions: " + getOID());
}
DataQuery versions = getSession().retrieveQuery(QUERY_PENDING_ITEMS);
versions.setParameter("itemID", getDraftVersion().getID());
- return new ItemCollection
- (new DataQueryDataCollectionAdapter(versions, "item"));
+ return new ItemCollection(new DataQueryDataCollectionAdapter(versions, "item"));
}
/**
@@ -909,7 +895,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("Getting the live version of " + this);
}
- if ( LIVE.equals(getVersion()) ) { return this; }
+ if (LIVE.equals(getVersion())) {
+ return this;
+ }
if (m_live.isCached()) {
return m_live.get();
@@ -918,14 +906,13 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("m_live miss");
final DataAssociationCursor versions =
- ((DataAssociation) get(VERSIONS)).cursor();
+ ((DataAssociation) get(VERSIONS)).cursor();
versions.addEqualsFilter(VERSION, LIVE);
try {
if (versions.next()) {
- ContentItem item = (ContentItem)
- DomainObjectFactory.newInstance(versions.getDataObject());
+ ContentItem item = (ContentItem) DomainObjectFactory.newInstance(versions.getDataObject());
return m_live.set(item);
}
return m_live.set(null);
@@ -992,7 +979,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Publishing methods
//
-
/**
* Method to determine whether this ContentItem should
* be automatically published to the file system.
@@ -1053,19 +1039,19 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/
public void setLive(final ContentItem version) {
if (s_log.isDebugEnabled()) {
- s_log.debug("Setting item " + this + " live with version " +
- version);
+ s_log.debug("Setting item " + this + " live with version "
+ + version);
}
if (Assert.isEnabled()) {
Assert.isTrue(version == null || LIVE.equals(version.getVersion()),
- "Item version " + version + " must be null or " +
- "the live version");
+ "Item version " + version + " must be null or "
+ + "the live version");
}
if (isLive()) {
- s_log.debug("The item is already live; getting the current " +
- "live version");
+ s_log.debug("The item is already live; getting the current "
+ + "live version");
final ContentItem oldVersion = getLiveVersion();
@@ -1082,8 +1068,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// XXX We don't need to use a custom query here
// anymore.
final DataQuery items =
- SessionManager.getSession().retrieveQuery
- ("com.arsdigita.cms.getLiveItemsWithSameParent");
+ SessionManager.getSession().retrieveQuery("com.arsdigita.cms.getLiveItemsWithSameParent");
items.addNotEqualsFilter("id", oldVersion.getID());
items.setParameter("itemId", oldVersion.getID());
@@ -1095,8 +1080,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
parent = getParent();
if (s_log.isDebugEnabled()) {
- s_log.debug(oldVersion + " is the last child of " +
- parent);
+ s_log.debug(oldVersion + " is the last child of "
+ + parent);
}
}
@@ -1117,15 +1102,15 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (parent instanceof ContentBundle || parent instanceof Folder) {
if (s_log.isDebugEnabled()) {
- s_log.debug("Parent of " + oldVersion + " is " + parent +
- "; unpublishing the parent");
+ s_log.debug("Parent of " + oldVersion + " is " + parent
+ + "; unpublishing the parent");
}
- ((ContentItem) parent).setLive( null );
+ ((ContentItem) parent).setLive(null);
}
- s_log.debug("Setting the live version association to null and " +
- "saving");
+ s_log.debug("Setting the live version association to null and "
+ + "saving");
setLiveVersion(null);
@@ -1133,8 +1118,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
}
if (version != null) {
- s_log.debug("The new version is not null; setting the live " +
- "version association");
+ s_log.debug("The new version is not null; setting the live "
+ + "version association");
setLiveVersion(version);
@@ -1161,30 +1146,29 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return the new pending version
*/
public ContentItem publish(final LifecycleDefinition cycleDef,
- final Date startDate) {
+ final Date startDate) {
applyTag("Published");
Versions.suspendVersioning();
if (s_log.isDebugEnabled()) {
- s_log.debug("Publishing item " + this + " with lifecycle " +
- "definition " + cycleDef + " and start date " +
- startDate);
+ s_log.debug("Publishing item " + this + " with lifecycle "
+ + "definition " + cycleDef + " and start date "
+ + startDate);
}
-/* amended Chris Gilbert
- *
- * Some content types may have their own lifecycles with their own
- * default listeners. Previous implementation just enforced
- * the listener retrieved from getPublisherClassName. This amendment
- * looks for a default listener in the cycle definition first
- *
- */
- String listener = cycleDef.getDefaultListener();
- if (listener == null) {
- listener = getPublishListenerClassName();
- }
- final Lifecycle cycle = cycleDef.createFullLifecycle
- (startDate, listener);
+ /* amended Chris Gilbert
+ *
+ * Some content types may have their own lifecycles with their own
+ * default listeners. Previous implementation just enforced
+ * the listener retrieved from getPublisherClassName. This amendment
+ * looks for a default listener in the cycle definition first
+ *
+ */
+ String listener = cycleDef.getDefaultListener();
+ if (listener == null) {
+ listener = getPublishListenerClassName();
+ }
+ final Lifecycle cycle = cycleDef.createFullLifecycle(startDate, listener);
if (s_log.isDebugEnabled()) {
s_log.debug("Instantiated lifecycle " + cycle);
@@ -1199,21 +1183,21 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (Assert.isEnabled()) {
Assert.exists(pending, ContentItem.class);
- Assert.isTrue(PENDING.equals(pending.getVersion()) ||
- LIVE.equals(pending.getVersion()),
- "The new pending item must be pending or live; " +
- "instead it is " + pending.getVersion());
+ Assert.isTrue(PENDING.equals(pending.getVersion())
+ || LIVE.equals(pending.getVersion()),
+ "The new pending item must be pending or live; "
+ + "instead it is " + pending.getVersion());
}
return pending;
}
public String getPublishListenerClassName() {
- String className = ContentSection.getConfig().getPublishLifecycleListenerClass();
- if (className != null && !"".equals(className)) {
- return className;
- } else {
- return PUBLISH_LISTENER_CLASS;
- }
+ String className = ContentSection.getConfig().getPublishLifecycleListenerClass();
+ if (className != null && !"".equals(className)) {
+ return className;
+ } else {
+ return PUBLISH_LISTENER_CLASS;
+ }
}
/**
@@ -1230,9 +1214,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (isLive()) {
if (s_log.isDebugEnabled()) {
- s_log.debug("The item is currently live; removing the " +
- "lifecycle of the public version, " +
- getPublicVersion());
+ s_log.debug("The item is currently live; removing the "
+ + "lifecycle of the public version, "
+ + getPublicVersion());
}
removeLifecycle(getPublicVersion());
@@ -1261,37 +1245,37 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Republish the item using its existing lifecycle
*/
public void republish() {
- republish(false);
+ republish(false);
}
-
+
/**
- * Republish the item
- * @parameter reset - if true create a new lifecycle, if false use existing
- * Called from ui.lifecycle.ItemLifecycleItemPane.java
- */
+ * Republish the item
+ * @parameter reset - if true create a new lifecycle, if false use existing
+ * Called from ui.lifecycle.ItemLifecycleItemPane.java
+ */
public void republish(boolean reset) {
- if( s_log.isDebugEnabled() ) {
- s_log.debug( "Republishing item " + getOID().toString() );
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("Republishing item " + getOID().toString());
}
- applyTag( "Republished" );
+ applyTag("Republished");
Versions.suspendVersioning();
- Assert.isTrue( isLive(), "Attempt to republish non live item " + getOID() );
+ Assert.isTrue(isLive(), "Attempt to republish non live item " + getOID());
Lifecycle cycle = getLifecycle();
- Assert.exists( cycle, Lifecycle.class );
- //resets lifecycle if opted
- if(reset){
+ Assert.exists(cycle, Lifecycle.class);
+ //resets lifecycle if opted
+ if (reset) {
cycle.reset();
- }
- if( s_log.isDebugEnabled() ) {
- s_log.debug( "Reusing lifecycle " + cycle.getOID() );
+ }
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("Reusing lifecycle " + cycle.getOID());
}
- ContentItem newLive = createPendingVersion( cycle );
- setLive( null );
- promotePendingVersion( newLive );
+ ContentItem newLive = createPendingVersion(cycle);
+ setLive(null);
+ promotePendingVersion(newLive);
}
/**
@@ -1305,9 +1289,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
final Lifecycle lifecycle = LifecycleService.getLifecycle(this);
if (lifecycle == null) {
- if( s_log.isDebugEnabled() ) {
- s_log.debug("The item has no lifecycle; checking if the " +
- "public version has a lifecycle");
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("The item has no lifecycle; checking if the "
+ + "public version has a lifecycle");
}
final ContentItem pub = getPublicVersion();
@@ -1320,8 +1304,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
final Lifecycle cyclelife = LifecycleService.getLifecycle(pub);
if (s_log.isDebugEnabled()) {
- s_log.debug("The public version has a lifecycle; " +
- "returning " + cyclelife);
+ s_log.debug("The public version has a lifecycle; "
+ + "returning " + cyclelife);
}
return cyclelife;
@@ -1361,7 +1345,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// XXX domlay What is the relation of setLifecycle(Lifecycle) and
// publish(LifecycleDefinition ...)? It doesn't seem coherent.
-
/**
* Remove the associated lifecycle.
*/
@@ -1370,8 +1353,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// item?
if (s_log.isDebugEnabled()) {
- s_log.debug("Removing lifecycle instance from item " +
- itemToRemove);
+ s_log.debug("Removing lifecycle instance from item "
+ + itemToRemove);
}
LifecycleService.removeLifecycle(itemToRemove);
@@ -1394,7 +1377,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Category stuff
//
-
/**
* @return all categories to which this item belongs
*/
@@ -1426,9 +1408,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
Category root = Category.getRootForObject(getContentSection(), useContext);
if (null == root) {
- s_log.warn("No root category for " +
- getContentSection().getOID().toString() +
- " with context " + useContext);
+ s_log.warn("No root category for "
+ + getContentSection().getOID().toString()
+ + " with context " + useContext);
return Collections.EMPTY_LIST.iterator();
}
@@ -1502,7 +1484,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Versioning stuff
//
-
/**
* Recursively copy this item, creating a clone.
* Reassign composite associations from the copy to point
@@ -1521,7 +1502,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return the live version for this item
* @see #copyServicesFrom(ContentItem)
*/
- public ContentItem copy() {
+ public ContentItem copy() {
return copy(null, false);
}
@@ -1545,7 +1526,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
newItem.setParent(newParent);
}
if (copyServices) {
- newItem.copyServicesFrom(this);
+ newItem.copyServicesFrom(this);
}
return newItem;
}
@@ -1569,6 +1550,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
return newItem;
}
+
/**
* Transfer services, such as categories,
* from the passed-in item to this item. This method should be
@@ -1658,8 +1640,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @param version The new Version to set
*/
protected void setVersionRecursively(final String version) {
- s_log.debug("Recursively updating the version attribute of the " +
- "item");
+ s_log.debug("Recursively updating the version attribute of the "
+ + "item");
new VersionUpdater(version).updateItemVersion(this);
}
@@ -1692,10 +1674,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @deprecated use {@link #copyProperty(CustomCopy, Property, ItemCopier)} instead
*/
protected final boolean copyProperty(final ContentItem source,
- final String attribute,
- final ItemCopier copier) {
- throw new UnsupportedOperationException
- ("use copyProperty(CustomCopy, Property, ItemCopier) for copying");
+ final String attribute,
+ final ItemCopier copier) {
+ throw new UnsupportedOperationException("use copyProperty(CustomCopy, Property, ItemCopier) for copying");
}
/**
@@ -1784,8 +1765,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* to copy the property.
*/
public boolean copyProperty(final CustomCopy source,
- final Property property,
- final ItemCopier copier) {
+ final Property property,
+ final ItemCopier copier) {
String attribute = property.getName();
if (CHILDREN.equals(attribute)) {
return true;
@@ -1812,7 +1793,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// If live Bundle already exists, recategorize.
if (PARENT.equals(attribute)) {
- ACSObject parent = ((ContentItem)source).getParent();
+ ACSObject parent = ((ContentItem) source).getParent();
if (parent != null && copier.getCopyType() == ItemCopier.VERSION_COPY) {
if (parent instanceof ContentBundle) {
@@ -1825,14 +1806,14 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
Set draftCatSet = new HashSet();
CategoryCollection liveCategories =
- liveBundle.getCategoryCollection();
+ liveBundle.getCategoryCollection();
while (liveCategories.next()) {
liveCatSet.add(liveCategories.getCategory());
}
liveCategories.close();
CategoryCollection draftCategories =
- bundle.getCategoryCollection();
+ bundle.getCategoryCollection();
while (draftCategories.next()) {
draftCatSet.add(draftCategories.getCategory());
}
@@ -1891,7 +1872,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Multilingual content
//
-
/**
* Language of the content item.
*
@@ -1924,10 +1904,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// slp.getLocale()
try {
- locale = Locale.fromJavaLocale
- (new java.util.Locale(getLanguage(),""));
+ locale = Locale.fromJavaLocale(new java.util.Locale(getLanguage(), ""));
} catch (GlobalizationException e) {
- s_log.warn ("GlobalizationException thrown in getLocale()", e);
+ s_log.warn("GlobalizationException thrown in getLocale()", e);
throw new UncheckedWrapperException(e.getMessage());
}
@@ -1960,7 +1939,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Deprecated methods and classes
//
-
/**
* Assert that this item is a top-level master object
* @deprecated with no replacement
@@ -1972,11 +1950,11 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//
// Private utility methods and classes
//
-
/**
* Caches a version of this item.
*/
private class VersionCache {
+
private ContentItem m_version;
private boolean m_cached;
@@ -2007,18 +1985,20 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
m_cached = false;
}
}
+
/**
* Remove any Links pointing to this item before deletion.
* XXX This should go away when one-way association targets can
* specify the equivalent of on delete set null
*/
+ @Override
protected void beforeDelete() {
super.beforeDelete();
// remove Link associations to this
DataCollection dc = SessionManager.getSession().retrieve(Link.BASE_DATA_OBJECT_TYPE);
- dc.addEqualsFilter(Link.TARGET_ITEM+"." + ACSObject.ID,
- getID());
+ dc.addEqualsFilter(Link.TARGET_ITEM + "." + ACSObject.ID,
+ getID());
while (dc.next()) {
Link link = (Link) DomainObjectFactory.newInstance(dc.getDataObject());
link.setTargetItem(null);
@@ -2026,26 +2006,23 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// remove ContentGroup associations to this
dc = SessionManager.getSession().retrieve(ContentGroupAssociation.BASE_DATA_OBJECT_TYPE);
- dc.addEqualsFilter(ContentGroupAssociation.CONTENT_ITEM+"." + ACSObject.ID,
- getID());
+ dc.addEqualsFilter(ContentGroupAssociation.CONTENT_ITEM + "." + ACSObject.ID,
+ getID());
while (dc.next()) {
ContentGroupAssociation groupAssoc = (ContentGroupAssociation) DomainObjectFactory.newInstance(dc.getDataObject());
groupAssoc.setContentItem(null);
}
}
-
-
/**
* Overriding the Auditing interface in order to use the denormalized
* information
*/
-
/**
* Gets the user who created the object. May be null.
* @return the user who created the object.
*/
-
+ @Override
public User getCreationUser() {
return m_audit_trail.getCreationUser();
}
@@ -2054,7 +2031,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the creation date of the object.
* @return the creation date.
*/
-
+ @Override
public Date getCreationDate() {
return m_audit_trail.getCreationDate();
}
@@ -2064,7 +2041,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* null.
* @return the creation IP address.
*/
-
+ @Override
public String getCreationIP() {
return m_audit_trail.getCreationIP();
}
@@ -2073,7 +2050,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the user who last modified the object. May be null.
* @return the last modifying user.
*/
-
+ @Override
public User getLastModifiedUser() {
return m_audit_trail.getLastModifiedUser();
}
@@ -2082,7 +2059,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the last modified date.
* @return the last modified date.
*/
-
+ @Override
public Date getLastModifiedDate() {
return m_audit_trail.getLastModifiedDate();
}
@@ -2091,11 +2068,10 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the last modified IP address. May be null.
* @return the IP address associated with the last modification.
*/
-
+ @Override
public String getLastModifiedIP() {
return m_audit_trail.getLastModifiedIP();
}
-
protected static List extraXMLGenerators = new ArrayList();
/**
@@ -2106,4 +2082,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
public List getExtraXMLGenerators() {
return extraXMLGenerators;
}
+
+ public boolean hasRelationAttributes() {
+ return !RELATION_ATTRIBUTES.isEmpty();
+ }
+
+ public StringTokenizer getRelationAttributes() {
+ return new StringTokenizer(RELATION_ATTRIBUTES, ";");
+ }
}
diff --git a/ccm-cms/src/com/arsdigita/cms/RelationAttribute.java b/ccm-cms/src/com/arsdigita/cms/RelationAttribute.java
new file mode 100644
index 000000000..129f3e424
--- /dev/null
+++ b/ccm-cms/src/com/arsdigita/cms/RelationAttribute.java
@@ -0,0 +1,20 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package com.arsdigita.cms;
+
+import java.util.StringTokenizer;
+
+/**
+ *
+ * @author quasi
+ */
+public interface RelationAttribute {
+
+ public abstract boolean hasRelationAttributes();
+
+ public abstract StringTokenizer getRelationAttributes();
+
+}
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericContact.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericContact.java
index a86496900..735641b15 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericContact.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericContact.java
@@ -23,23 +23,27 @@ import com.arsdigita.persistence.DataObject;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ContentPage;
+import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
+import java.util.StringTokenizer;
/**
* This content type represents an basic contact
*
*/
-public class GenericContact extends ContentPage {
+public class GenericContact extends ContentPage implements RelationAttribute {
/** PDL property names */
public static final String PERSON = "person";
public static final String ADDRESS = "address";
public static final String CONTACT_ENTRIES = "contactentries";
+ private static final String RELATION_ATTRIBUTES = "GenericContactType;GenericContactEntryType";
+
// Config
private static final GenericContactConfig s_config = new GenericContactConfig();
static {
@@ -140,4 +144,14 @@ public class GenericContact extends ContentPage {
public boolean hasContactEntries() {
return !this.getContactEntries().isEmpty();
}
+
+ @Override
+ public boolean hasRelationAttributes() {
+ return !RELATION_ATTRIBUTES.isEmpty();
+ }
+
+ @Override
+ public StringTokenizer getRelationAttributes() {
+ return new StringTokenizer(RELATION_ATTRIBUTES, ";");
+ }
}
diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
index fe9fb8a69..8c9dd1684 100644
--- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
+++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPerson.java
@@ -16,25 +16,27 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
-
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ContentPage;
+import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
+import java.util.StringTokenizer;
import java.util.Date;
/**
* Basic GenericPerson Contenttype for OpenCCM.
*
+ * @author Sören Bernstein
* @author Jens Pelzetter
*/
-public class GenericPerson extends ContentPage {
+public class GenericPerson extends ContentPage implements RelationAttribute {
public static final String PERSON = "person";
public static final String SURNAME = "surname";
@@ -45,10 +47,11 @@ public class GenericPerson extends ContentPage {
public static final String CONTACTS = "contacts";
public static final String CONTACT_TYPE = "contact_type";
public static final String CONTACT_ORDER = "contact_order";
+ private static final String RELATION_ATTRIBUTES = "GenericContactType";
+
/** Data object type for this domain object */
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.GenericPerson";
-
/**
* Default constructor. This creates a new (empty) GenericPerson.
**/
@@ -80,34 +83,25 @@ public class GenericPerson extends ContentPage {
}
/* accessors *****************************************************/
- public String getSurname() {
- return (String)get(SURNAME);
- }
- public void setSurname(String surname) {
- set(SURNAME, surname);
- }
+ public String getSurname() {
+ return (String) get(SURNAME);
+ }
- public String getGivenName() {
- return (String)get(GIVENNAME);
- }
- public void setGivenName(String givenName) {
- set(GIVENNAME, givenName);
- }
+ public void setSurname(String surname) {
+ set(SURNAME, surname);
+ }
- public String getTitlePre() {
- return (String)get(TITLEPRE);
- }
- public void setTitlePre(String titlePre) {
- set(TITLEPRE, titlePre);
- }
+ public String getGivenName() {
+ return (String) get(GIVENNAME);
+ }
- public String getTitlePost() {
- return (String)get(TITLEPOST);
- }
- public void setTitlePost(String titlePost) {
- set(TITLEPOST, titlePost);
- }
+ public void setGivenName(String givenName) {
+ set(GIVENNAME, givenName);
+ }
+ public String getTitlePre() {
+ return (String) get(TITLEPRE);
+ }
public Date getBirthdate() {
return (Date)get(BIRTHDATE);
}
@@ -115,6 +109,18 @@ public class GenericPerson extends ContentPage {
set(BIRTHDATE, birthdate);
}
+ public void setTitlePre(String titlePre) {
+ set(TITLEPRE, titlePre);
+ }
+
+ public String getTitlePost() {
+ return (String) get(TITLEPOST);
+ }
+
+ public void setTitlePost(String titlePost) {
+ set(TITLEPOST, titlePost);
+ }
+
// Get all contacts for this person
public GenericPersonContactCollection getContacts() {
return new GenericPersonContactCollection((DataCollection) get(CONTACTS));
@@ -140,4 +146,13 @@ public class GenericPerson extends ContentPage {
return !this.getContacts().isEmpty();
}
+ @Override
+ public boolean hasRelationAttributes() {
+ return !RELATION_ATTRIBUTES.isEmpty();
+ }
+
+ @Override
+ public StringTokenizer getRelationAttributes() {
+ return new StringTokenizer(RELATION_ATTRIBUTES, ";");
+ }
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/ui/CMSResources_de.properties
new file mode 100755
index 000000000..6217d5b4f
--- /dev/null
+++ b/ccm-cms/src/com/arsdigita/cms/ui/CMSResources_de.properties
@@ -0,0 +1,832 @@
+cms.attributeset_is_already_locked=AttributeSet ist bereits gesperrt
+cms.attributeset_is_locked=AttributeSet ist gesperrt
+cms.cannot_create_xml_document=Kann XML Dokument nicht erstellen
+cms.cant_promote_folders=Can't promote folders
+cms.classnotfoundexception=ClassNotFoundException:
+cms.contenttypes.contact=Kontakt:
+cms.contenttypes.contact_details=Kontakt Details:
+cms.contenttypes.contact_information=Kontakt Information:
+cms.contenttypes.contactinfo=KontaktInfo:
+cms.contenttypes.cost=Kosten:
+cms.contenttypes.coudlnt_retrieve_text=Text konnte nicht gefunden werden
+cms.contenttypes.current_image=Gegenw\u00e4rtiges Bild\:
+cms.contenttypes.department=Abteilung:
+cms.contenttypes.end_date=Datum Ende:
+cms.contenttypes.end_time=Zeitpunkt Ende:
+cms.contenttypes.event_type_not_registered=Veranstaltungs-Typ noch nicht registriert
+
+cms.ui.item.days=Tage
+
+cms.ui.item.notification_period=Vorab Benachrichtigung:
+cms.ui.item.notification_period_before_start=Der Zeitraum f\u00fcr eine Vorab Benachrichtigung darf nicht l\u00e4nger als der Publikationszeitraum sein.
+cms.ui.item.hours=Stunden
+cms.contenttypes.grade=Grade:
+cms.contenttypes.image=Bilder:
+cms.contenttypes.installer.article_section=Artikel Abschnitt
+cms.contenttypes.installer.article_section_for_a_multipart_article=Artikel Abschnitt f\u00fcr einen mehrteiligen Artikel
+cms.contenttypes.job_description=Beschreibung:
+cms.contenttypes.job_type_not_registered=Inhaltstyp Job nicht registriert
+cms.contenttypes.lead=Beschreibung (Lead Text):
+cms.contenttypes.legalnotice_type_not_registered=Inhaltstyp LegalNotice nicht registriert
+cms.contenttypes.link=Link:
+cms.contenttypes.link_to_map=Karte (Link)\:
+cms.contenttypes.location=Ort:
+cms.contenttypes.main_contributor=Hauptredner\:
+cms.contenttypes.minutes_type_not_registered=Inhaltstyp Minutes nicht registriert
+cms.contenttypes.news_date=Datum:
+cms.contenttypes.newsitem_type_not_registered=Inhaltstyp NewsItem nicht registriert
+cms.contenttypes.no_content_section=Kein Inhaltsabschnitt
+cms.contenttypes.no_section=Kein Abschnitt
+cms.contenttypes.opening_time=\u00d6ffnungszeit\:
+cms.contenttypes.person_specification=Person Specification:
+cms.contenttypes.pressrelease_type_not_registered=Inhaltstyp PressRelease nicht registriert
+cms.contenttypes.ref_number=Ref. Nummer\:
+cms.contenttypes.salary=Gehalt:
+cms.contenttypes.service_type_not_registered=Inhaltstyp Service nicht registriert
+cms.contenttypes.services_provided=Verf\u00fcgbare Services:
+cms.contenttypes.start_date=Start Datum:
+cms.contenttypes.start_time=Beginn um\:
+cms.contenttypes.subjectitems=Themen\:
+cms.contenttypes.summary=Beschreibung:
+cms.contenttypes.title=Titel:
+cms.contenttypes.ui.action_item=Action Item:
+cms.contenttypes.ui.agenda_date=Zeit:
+cms.contenttypes.ui.agenda_date_and_time=Datum und Zeit:
+cms.contenttypes.ui.attendees=Teilnehmer:
+
+cms.contenttypes.ui.bodyoverview=\u00dcbersicht\:
+cms.contenttypes.ui.closing_date=Abschluss am\:
+
+cms.contenttypes.ui.contact_details=Kontakt Details:
+cms.contenttypes.ui.contact_info=Kontakt Info:
+cms.contenttypes.ui.contacts=Kontakte:
+cms.contenttypes.ui.content_group_current_items=Aktuelle Items:
+cms.contenttypes.ui.content_group_name=Inhalt Gruppen Name:
+cms.contenttypes.ui.content_group_new_item=Neuen Item hinzuf\u00fcgen:
+cms.contenttypes.ui.cost=Kosten:
+cms.contenttypes.ui.creation_date=Erstellungsdatum:
+cms.contenttypes.ui.date=Datum:
+cms.contenttypes.ui.department=Abteilung:
+cms.contenttypes.ui.description=Beschreibung:
+cms.contenttypes.ui.description_of_minutes=Description of Minutes:
+cms.contenttypes.ui.end_date=Enddatum:
+cms.contenttypes.ui.end_time=Ende um\:
+cms.contenttypes.ui.government_uid=Government UID:
+cms.contenttypes.ui.grade=Grad:
+cms.contenttypes.ui.homepage=Homepage?
+cms.contenttypes.ui.job_description=Job Beschreibung:
+cms.contenttypes.ui.launch_date=Ver\u00f6ffentlichungsdatum:
+cms.contenttypes.ui.lead=Beschreibung (Lead Text):
+cms.contenttypes.ui.lead_line=Beschreibung (Lead Zeile):
+cms.contenttypes.ui.link_to_map=Link to Map:
+cms.contenttypes.ui.location=Ort:
+cms.contenttypes.ui.main_contributor=Hauptredner\:
+cms.contenttypes.ui.name=Name:
+cms.contenttypes.ui.opening_times=\u00d6ffnungszeiten\:
+
+cms.contenttypes.ui.person_specification=Person Specification:
+cms.contenttypes.ui.ref_code=Ref. Code:
+cms.contenttypes.ui.ref_code=Ref. Code:
+cms.contenttypes.ui.ref_number=Ref. Nr.:
+cms.contenttypes.ui.reference=Referenz:
+cms.contenttypes.ui.reference_code=Referenz Code:
+cms.contenttypes.ui.salary=Gehalt:
+cms.contenttypes.ui.services_provided=Verf\u00fcgbarer Service:
+cms.contenttypes.ui.start_date=Anfangsdatum:
+cms.contenttypes.ui.start_time=Anfangszeit:
+cms.contenttypes.ui.subject_items=Subject Items:
+cms.contenttypes.ui.summary=Beschreibung:
+cms.contenttypes.ui.there_are_no_events=Keine Ereignisse vorhanden
+cms.contenttypes.ui.title=Titel:
+cms.contenttypes.ui.view_image=Bild anzeigen
+cms.contenttypes.ui.event_start_time=Event Beginn um\:
+cms.contenttypes.ui.event_end_time=Event Ende um\:
+cms.dispatcher.cannot_find_domain_object=Domain Object nicht auffindbar
+cms.dispatcher.could_not_find_imageasset=ImageAsset nicht auffindbar:
+cms.dispatcher.failed_to_retrieve_imageasset=ImageAsset nicht auffindbar:
+cms.dispatcher.no_permission_to_access_resource=Keine Rechte f\u00fcr diese Ressource
+cms.dispatcher.not_implemented=nicht implementiert
+cms.dispatcher.unknown_context=Unbekannter Kontext:
+cms.formbuilder.cannot_create_acsobject=ACSObject kann nicht erstellt werden
+cms.formbuilder.cannot_instantiate_object=Object kann nicht instantiiert werden
+cms.formbuilder.no_such_form=Form nicht vorhanden
+cms.formbuilder.roll_me_back=Roll me back
+cms.formbuilder.css=Cascading Style Sheet (CSS) Class Attribute
+cms.illegalaccessexception=IllegalAccessException:
+cms.image.erroneous_jpeg_marker_length=Erroneous JPEG marker length
+cms.image.expected_soi_marker_first=Expected SOI marker first
+cms.image.not_a_jpeg_file=Keine JPEG Datei
+cms.installer.approval=Akzeptieren
+cms.installer.article=Artikel
+cms.installer.authoring=Verfassen
+cms.installer.cannot_find_cms_package_type=kann CMS Pakettyp nicht finden
+cms.installer.cannot_find_content_type=kann Inhaltstyp nicht finden
+cms.installer.cannot_find_file=kann Datei nicht finden
+cms.installer.cannot_find_group_for_email=Kann email-Gruppe nicht finden
+cms.installer.cannot_read_line_of_data=Kann Datensatz nicht lesen
+cms.installer.cannot_set_template_text=Kann Template Text nicht festlegen
+cms.installer.could_not_load_section=Kann die folgende ContentSection nicht laden '{0}'
+cms.installer.deploy=anwenden
+cms.installer.failed_to_update_the_default_content_section=Update der Default Content Section gescheitert.
+cms.installer.formbuilder.form=Form
+cms.installer.formbuilder.form_section=Form Abschnitt
+cms.installer.production_workflow=Production Workflow
+cms.installer.root_folder=Basisverzeichnis
+cms.installer.root_site_node_missing=Root site node missing
+cms.installer.simple_publication=Einfache Ver\u00f6ffentlichung
+cms.installer.template=Vorlage
+cms.instantiationexception=InstantiationException:
+cms.lifecycle.could_not_fetch_lifecycle=Could not fetch lifecycle:
+cms.lifecycle.could_not_fetch_phase=Could not fetch phase:
+cms.ui.item.lifecycle.start_date_in_past=Das Anfangsdatum darf nicht in der Vergangenheit liegen.
+cms.ui.item.lifecycle.end_date_before_start_date=Das Enddatum darf nicht vor dem Anfangsdatum liegen.
+cms.nosuchmethodexception=NoSuchMethodException:
+cms.publishToFile.cannot_find_file=Datei nicht gefunden
+cms.publishToFile.cannot_find_item_class=Item Class nicht gefunden
+cms.publishToFile.cannot_find_server=Server nicht auffindbar
+cms.publishToFile.cannot_get_sequence_value=cannot get sequence value
+cms.publishToFile.cannot_read_template_text=cannot read template text
+cms.publishToFile.could_not_get_object_for_oid=Could not get object for oid
+cms.publishToFile.error_executing=Ausf\u00fchrungsfehler bei '{0}' \:
+cms.publishToFile.exit_value_was=Exit Code war
+cms.publishToFile.interrupted_when_doing=Unterbrochen bei Ausf\u00fchren von '{0}'
+cms.publishToFile.invalid_brokenlinkaction=Ung\u00fcltige BrokenLinkAction\:
+cms.publishToFile.invalid_reference_target_type=Ung\u00fcltige reference target type\:
+cms.publishToFile.malformed_url=Falsche Struktur der URL\:
+cms.publishToFile.not_found_in_servers_list= In der Server Liste unauffindbar
+cms.publishToFile.publish_to_file_listener_could_not_be_created=Publish to file listener could not be created:
+cms.publishToFile.publish_to_file_setlocalrequestpassword_could_not_be_created=Publish to file SetLocalRequestPassword could not be created:
+cms.publishToFile.publishsource_sourcebase_must_end_in_=PublishSource sourceBase must end in '/'
+cms.publishToFile.server=Server
+cms.publishToFile.unable_to_find_closing_for_tag=Schlie\u00dfendenes '>' nicht vorhanden.
+cms.publishToFile.unable_to_get_contentitem=ContentItem nicht aufrufbar\:
+cms.contenttypes.ui.address=Adresse:
+cms.tasks.ui.anyone=Jedermann
+cms.tasks.ui.assigned_to=Zugewiesen an:
+cms.tasks.ui.assignment_info=Zuweisungsinfo
+cms.tasks.ui.content_center=Dokumentenverwaltung
+cms.tasks.ui.create=Erstellen
+cms.tasks.ui.description=Beschreibung
+cms.tasks.ui.disabled=Deaktiviert
+cms.tasks.ui.due_date=F\u00e4lligkeitsdatum
+cms.tasks.ui.due_on=F\u00e4llig am
+cms.tasks.ui.enabled=Aktiviert
+cms.tasks.ui.entered_by=Eingegeben von\:
+cms.tasks.ui.finished=Abgeschlossen
+cms.tasks.ui.mark_task_as_finished=Aufgabe als abgeschlossen markieren
+cms.tasks.ui.me=Ich
+cms.tasks.ui.no_assigned_tasks=Es gibt gegenw\u00e4rtig keine zugewiesenen Aufgaben.
+cms.tasks.ui.no_assignees=No Assignees
+cms.tasks.ui.no_user_logged_in=Es ist kein Benutzer angemeldet, es kann keine Aufgabe angezeit werden.
+cms.tasks.ui.status=Status:
+cms.tasks.ui.status_no_colon=Status
+cms.tasks.ui.task_type=Aufgabentyp
+cms.tasks.ui.title=Titel
+cms.tasks.ui.workflow=Bearbeitungsfluss
+cms.templates=Vorlagen
+
+cms.title=Titel
+cms.ui.Authoring=Verfassen
+cms.ui.History=Historie
+cms.ui.Lifecycle=Ver\u00f6ffentlichungszyklus
+cms.ui.Publishing=Herausgabe
+cms.ui.Summary=Zusammenfassung
+cms.ui.template=Vorlage
+cms.ui.Templates=Vorlagen
+cms.ui.action=Aktion
+cms.ui.actions=Aktionen
+cms.ui.all_items=Alle Inhalte
+
+cms.ui.assigned_categories=Zugewiesene Kategorien:
+cms.ui.attention=Obacht!
+cms.ui.authoring.an_item_with_this_name_already_exists=Ein Item mit diesem Namen existiert
+cms.ui.authoring.bad_getblob_datatype=Ung\u00fcltiger Datentyp getBlob
+cms.ui.authoring.bad_getclob_datatype=Ung\u00fcltiger Datentyp getBlob
+cms.ui.authoring.body=Textbereich:
+cms.ui.authoring.caption=Untertitel:
+cms.ui.authoring.content_type=Inhaltstyp:
+cms.ui.authoring.couldnt_create_contentpage=Konnte ContentPage nicht erstellen
+cms.ui.authoring.edit_body_text=Textk\u00f6rper editieren:
+cms.ui.authoring.edit_caption=Untertitel editieren
+cms.ui.authoring.file_action=File Action
+cms.ui.authoring.image_action=Image Action
+cms.ui.authoring.invalid_create_component=Creation component for parent content type is invalid.
+cms.ui.authoring.missing_content_type=Missing content type
+cms.ui.authoring.missing_item_id=Missing item id
+cms.ui.authoring.name=Name:
+cms.ui.authoring.name_url=Name (URL):
+cms.ui.authoring.no_asset=Kein Asset
+cms.ui.authoring.no_content_types_were_found=Keine Inhaltstypen gefunden
+cms.ui.authoring.no_current_wizard=No current wizard
+cms.ui.authoring.not_implemented=Nicht implementiert
+cms.ui.authoring.page_launch_date=Ver\u00f6ffentlichungsdatum:
+cms.ui.authoring.page_title=Titel der Seite:
+cms.ui.authoring.remove_image=Bild entfernen
+cms.ui.authoring.select_an_existing_image=Vorhandenes Bild ausw\u00c4hlen
+cms.ui.authoring.sql_error_in_getting_byte_content=SQL Error in getting byte content!
+cms.ui.authoring.sqle=SQLE
+cms.ui.authoring.steps=Authoring steps
+cms.ui.authoring.submission_cancelled=Submission Cancelled
+cms.ui.authoring.text_type=Text Type:
+cms.ui.authoring.this_article_does_not_have_an_image=Dieser Artikel hat kein Bild.
+cms.ui.authoring.title=Titel:
+cms.ui.authoring.unable_to_load_file=Datei konnte nicht geladen werden:
+cms.ui.authoring.upload_a_new_image=Neues Bild hochladen
+cms.ui.authoring.upload_image=Bild hochladen:
+cms.ui.authoring.file_upload.auto_detect=(automatisch)
+cms.ui.authoring.file_upload.file_type=Dateityp:
+cms.ui.file=Datei:
+cms.ui.authoring.none=niemand
+cms.ui.authoring.workflow=Arbeitsablauf w\u00e4hlen
+cms.ui.authoring_kit_has_more_than_one_step=Dieses Authorenkit hat mehr als einen Schritt:
+cms.ui.authoring_kit_has_no_steps=Dieses Authorenkit hat keine Schritte:
+cms.ui.authoringkit.authoring_kit_for=Authorenkit f\u00fcr
+cms.ui.authoringkit.component=Komponente:
+cms.ui.authoringkit.content_type_id=Inhaltstyp ID#
+cms.ui.authoringkit.create_component=Komponente erstellen:
+cms.ui.authoringkit.createcomponent=Komponentenerstellung:
+cms.ui.authoringkit.current_row_does_not_exists=Aktuelle Zeile existiert nicht
+cms.ui.authoringkit.description=Beschreibung:
+cms.ui.authoringkit.description_bundle=Description Bundle
+cms.ui.authoringkit.description_key=Description Key
+cms.ui.authoringkit.do_you_really_want_to_delete_this_authoring_step=Soll dieser Schritt wirklich gel\u00f6scht werden?
+cms.ui.authoringkit.label=Label:
+cms.ui.authoringkit.label_bundle=Label Bundle
+cms.ui.authoringkit.label_key=Label Key
+cms.ui.authoringkit.ordering=Ordering:
+cms.ui.authoringkit.submission_cancelled=Submission Cancelled
+cms.ui.available_categories=Verf\u00fcgbare Kategorien:
+cms.ui.browse=Navigation
+cms.ui.browse_items_by_category=Durchsicht der Elemente nach Kategorien
+cms.ui.cancel=Abbruch
+cms.ui.cancel_hit=Abbruch dr\u00fccken
+cms.ui.cancelled=abgebrochen
+cms.ui.cannot_assign_groups_to_owner=cannot assign groups to owner
+cms.ui.categories=Kategorien
+cms.ui.category._back= (zur\u00fcck)
+cms.ui.category.add=Kategorie hinzuf\u00fcgen
+cms.ui.category.add_index_item=Set index item
+cms.ui.category.add_use_context=Add Use Context
+cms.ui.category.assigned_purposes=Assigned Purposes:
+cms.ui.category.available_purposes=Available Purposes:
+cms.ui.category.batch_categorized_objects=Batch Order Items in This Category
+cms.ui.category.batch_order_objects_order=Priorit\u00e4t
+cms.ui.category.batch_order_objects_title=Titel
+cms.ui.category.categorized_objects=Objekte in dieser Kategorie anordnen
+cms.ui.category.category.current=Aktuelle Kategorie
+cms.ui.category.change_index_item=Change index item
+cms.ui.category.content_item=Content Item
+cms.ui.category.delete=Kategorie l\u00f6schen
+cms.ui.category.delete_prompt=Wollen Sie wirklich diese Kategorie l\u00f6schen?
+cms.ui.category.descriptionn=Beschreibung:\n
+cms.ui.category.details=Kategorie Einzelheiten
+cms.ui.category.edit=Kategorie bearbeiten
+cms.ui.category.edit_a_category=Eine Kategorie bearbeiten
+cms.ui.category.edit_purposes=Edit purposes
+cms.ui.category.index_item.select=Index Element f\u00fcr diese Kategorie ausw\u00e4hlen
+cms.ui.category.index_item=Index Element
+cms.ui.category.intro=Kategory ausw\u00e4hlen
+cms.ui.category.is_abstract=Is abstract?
+cms.ui.category.is_enabled=Aktiviert?
+cms.ui.category.is_not_abstract=K\u00f6nnen Sie Objekte dieser Kategory zuordnen?
+cms.ui.category.item.none=Es gibt keine Elemente in dieser Kategory
+cms.ui.category.item=Kategorisierte Elemente
+cms.ui.category.labeln=Label:\n
+cms.ui.category.linked.add=Verkn\u00fcpfte Kategorien hinzuf\u00fcgen oder entfernen
+cms.ui.category.linked.none=Diese Kategorie hat keine verkn\u00fcpften Kategorien
+cms.ui.category.linked=Verkn\u00fcpfte Kategorien
+cms.ui.category.localizations=Sprachversionen
+cms.ui.category.localization.add=Sprachversion hinzuf\u00fcgen
+cms.ui.category.localization.name=Name
+cms.ui.category.localization.description=Beschreibung
+cms.ui.category.localization.url=URL
+cms.ui.category.localization.locale=Sprache
+cms.ui.category.localization.action=Aktion
+cms.ui.category.localization.confirm_delete=Soll diese Sprachversion gel\u00f6scht werden?
+cms.ui.category.localization.none=Diese Kategorie hat keine Sprachversionen
+cms.ui.category.localization.error_locale=Bitte w\u00e4hlen Sie eine Sprache aus
+cms.ui.category.name_not_unique=Es gibt bereits eine Kategorie mit diesem Namen.
+cms.ui.category.no_categorized_objects=Es gibt keine kategorisierten Objekte
+cms.ui.category.no_category_purposes=No Category Purposes
+cms.ui.category.no_linked_categories=No linked categories
+cms.ui.category.no_subcategories=No subcategories
+cms.ui.category.purpose.add=Add or remove category purposes
+cms.ui.category.purpose.assigned=Assigned purposes
+cms.ui.category.purpose.available=Available purposes
+cms.ui.category.purpose.none=This category has no assigned purposes
+cms.ui.category.purposes=Category purposes
+cms.ui.category.return=Return
+cms.ui.category.select_index_item=Select index item for category
+cms.ui.category.subcategories=Subcategories
+cms.ui.category.subcategory.none=This category has no subcategories
+cms.ui.category.templates=Category templates
+cms.ui.category.templates.assigned=Assigned templates
+cms.ui.category.there_are_no_items_in_this_category=There are no items in this category
+cms.ui.category.url=URL
+cms.ui.category.use_context=Use Context
+cms.ui.category.use_contexts=Use Contexts
+cms.ui.category.use_context_must_be_unique=Use context must be unique within a Content Section.
+cms.ui.choose_target_folder=Zielordner ausw\u00e4hlen
+cms.ui.content_center=Content center
+cms.ui.content_item=Dokument
+cms.ui.content_section=Content section
+cms.ui.content_section_configuration=