RelationAttribute

aktueller Stand

git-svn-id: https://svn.libreccm.org/ccm/trunk@508 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2010-08-17 09:48:38 +00:00
parent 3892f343f3
commit ab8c22becf
8 changed files with 1210 additions and 219 deletions

View File

@ -55,6 +55,7 @@ import com.arsdigita.util.Reporter;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.versioning.VersionedACSObject; import com.arsdigita.versioning.VersionedACSObject;
import com.arsdigita.versioning.Versions; import com.arsdigita.versioning.Versions;
import java.util.logging.Level;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -67,6 +68,7 @@ import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.StringTokenizer;
/** /**
* This class represents a content item. * 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 $ * @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_log = Logger.getLogger(ContentItem.class);
private static final Logger s_logDenorm = Logger.getLogger(ContentItem.class.getName() + ".Denorm"); private static final Logger s_logDenorm = Logger.getLogger(ContentItem.class.getName() + ".Denorm");
private static final String MODEL = "com.arsdigita.cms"; private static final String MODEL = "com.arsdigita.cms";
private static final String QUERY_PENDING_ITEMS = private static final String QUERY_PENDING_ITEMS =
MODEL + ".getPendingSortedByLifecycle"; MODEL + ".getPendingSortedByLifecycle";
public static final String BASE_DATA_OBJECT_TYPE = MODEL + ".ContentItem"; public static final String BASE_DATA_OBJECT_TYPE = MODEL + ".ContentItem";
/** /**
* A state marking the draft or master item corresponding to a * A state marking the draft or master item corresponding to a
* live or pending version of that item. * live or pending version of that item.
*/ */
public static final String DRAFT = "draft"; public static final String DRAFT = "draft";
/** /**
* A state marking the live version, a copy of the draft item. * 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. * 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 // Metadata attribute constants
public static final String ANCESTORS = "ancestors"; public static final String ANCESTORS = "ancestors";
public static final String PARENT = "parent"; 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 NAME = "name";
public static final String LANGUAGE = "language"; public static final String LANGUAGE = "language";
public static final String AUDITING = "auditing"; public static final String AUDITING = "auditing";
public static final String DRAFT_VERSION = "masterVersion"; public static final String DRAFT_VERSION = "masterVersion";
public static final String VERSIONS = "slaveVersions"; public static final String VERSIONS = "slaveVersions";
public static final String CONTENT_SECTION = "section"; public static final String CONTENT_SECTION = "section";
private static final String RELATION_ATTRIBUTES = "";
private static final String PUBLISH_LISTENER_CLASS = private static final String PUBLISH_LISTENER_CLASS =
PublishLifecycleListener.class.getName(); PublishLifecycleListener.class.getName();
private VersionCache m_pending; private VersionCache m_pending;
private VersionCache m_live; private VersionCache m_live;
private boolean m_wasNew; private boolean m_wasNew;
@ -253,7 +247,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
/** /**
* Default constructor. This creates a new content item. * Default constructor. This creates a new content item.
*/ */
public ContentItem() { public ContentItem() {
this(BASE_DATA_OBJECT_TYPE); this(BASE_DATA_OBJECT_TYPE);
s_log.debug("Undergoing creation"); s_log.debug("Undergoing creation");
@ -292,7 +286,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @param obj The <code>DataObject</code> with which to create or * @param obj The <code>DataObject</code> with which to create or
* load a content item * load a content item
*/ */
public ContentItem(final DataObject obj) { public ContentItem(final DataObject obj) {
super(obj); super(obj);
} }
@ -310,21 +304,20 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("Content item " + this + " created with type " + type); s_log.debug("Content item " + this + " created with type " + type);
} }
} }
private static DomainObjectObserver s_parentObs = private static DomainObjectObserver s_parentObs =
new AbstractDomainObjectObserver() { new AbstractDomainObjectObserver() {
public void set(DomainObject dobj, String name,
Object old, Object newVal) {
if (PARENT.equals(name)) {
ContentItem ci = (ContentItem) dobj;
if (newVal != null) { public void set(DomainObject dobj, String name,
PermissionService.setContext Object old, Object newVal) {
(ci.getOID(), ((DataObject) newVal).getOID()); if (PARENT.equals(name)) {
ContentItem ci = (ContentItem) dobj;
if (newVal != null) {
PermissionService.setContext(ci.getOID(), ((DataObject) newVal).getOID());
}
} }
} }
} };
};
/** /**
* Called from the base class (<code>DomainObject</code>) * Called from the base class (<code>DomainObject</code>)
@ -350,8 +343,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
m_reporter = new Reporter(s_log, this, ContentItem.class); m_reporter = new Reporter(s_log, this, ContentItem.class);
if (isNew()) { if (isNew()) {
s_log.debug(this + " is being newly created; " + s_log.debug(this + " is being newly created; "
"marking it as a draft version"); + "marking it as a draft version");
m_wasNew = true; m_wasNew = true;
@ -361,8 +354,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
try { try {
final ContentType type = final ContentType type =
ContentType.findByAssociatedObjectType ContentType.findByAssociatedObjectType(getSpecificObjectType());
(getSpecificObjectType());
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Set content type for " + this + " to " + type); 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); super.set(key, value);
} }
/** /**
* For new content items, sets the associated content type if it * For new content items, sets the associated content type if it
* has not been already set. * has not been already set.
@ -424,26 +415,26 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
/* /*
removed cg - object observer sets context based removed cg - object observer sets context based
on parent whenever parent is updated on parent whenever parent is updated
protected void afterSave() { protected void afterSave() {
super.afterSave(); super.afterSave();
s_log.info("******After Save of object " + getOID()); s_log.info("******After Save of object " + getOID());
// Set the object's context to its parent object for // Set the object's context to its parent object for
// permissioning. // permissioning.
if (m_wasNew) { if (m_wasNew) {
final ACSObject parent = getParent(); final ACSObject parent = getParent();
if (parent == null) { if (parent == null) {
s_log.info("parent is null - set context to content section"); s_log.info("parent is null - set context to content section");
PermissionService.setContext(this, getContentSection()); PermissionService.setContext(this, getContentSection());
} else { } else {
s_log.info("parent is " + parent.getOID()); s_log.info("parent is " + parent.getOID());
PermissionService.setContext(this, parent); PermissionService.setContext(this, parent);
}
}
} }
*/ }
}
*/
private void setDefaultContentSection() { private void setDefaultContentSection() {
s_log.debug("Setting the default content section"); 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) { if (parent != null && parent instanceof Folder) {
setContentSection(((ContentItem) parent).getContentSection()); setContentSection(((ContentItem) parent).getContentSection());
} else { } else {
s_log.debug("The item's parent is not a folder; I am " + s_log.debug("The item's parent is not a folder; I am "
"not setting the default content section"); + "not setting the default content section");
} }
} else { } else {
s_log.debug("The item's version is null or it is not draft; " + s_log.debug("The item's version is null or it is not draft; "
"doing nothing"); + "doing nothing");
} }
} }
@ -503,8 +494,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Get the parent object. * Get the parent object.
*/ */
public ACSObject getParent() { public ACSObject getParent() {
return (ACSObject) DomainObjectFactory. return (ACSObject) DomainObjectFactory.newInstance((DataObject) get(PARENT));
newInstance((DataObject) get(PARENT));
} }
/** /**
@ -524,7 +514,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/ */
public final ItemCollection getChildren() { public final ItemCollection getChildren() {
final DataAssociationCursor cursor = final DataAssociationCursor cursor =
((DataAssociation) super.get(CHILDREN)).cursor(); ((DataAssociation) super.get(CHILDREN)).cursor();
return new ItemCollection(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 * @return The content section to which this item belongs
*/ */
public ContentSection getContentSection() { public ContentSection getContentSection() {
return (ContentSection) DomainObjectFactory.newInstance return (ContentSection) DomainObjectFactory.newInstance((DataObject) get(CONTENT_SECTION));
((DataObject) get(CONTENT_SECTION));
} }
/** /**
@ -628,7 +617,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
coll.next(); coll.next();
s_log.debug("Get item path not jsp"); s_log.debug("Get item path not jsp");
boolean first = true; boolean first = true;
while ( coll.next()) { while (coll.next()) {
if (!first) { if (!first) {
result.append('/'); result.append('/');
} else { } else {
@ -677,10 +666,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return the items on the path to the root folder. * @return the items on the path to the root folder.
*/ */
public ItemCollection getPathInfo(boolean includeSelf) { public ItemCollection getPathInfo(boolean includeSelf) {
DataCollection collection = SessionManager.getSession().retrieve DataCollection collection = SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
(BASE_DATA_OBJECT_TYPE);
String ids = (String)get(ANCESTORS); String ids = (String) get(ANCESTORS);
if (ids == null) { if (ids == null) {
// this should not happen // this should not happen
if (includeSelf) { if (includeSelf) {
@ -699,9 +687,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
//add list of ancestors split by "/" character //add list of ancestors split by "/" character
ArrayList ancestors = new ArrayList(); ArrayList ancestors = new ArrayList();
int iIndex = 0; int iIndex = 0;
for (int i=ids.indexOf("/",0); i != -1; i = ids.indexOf("/", iIndex)) { for (int i = ids.indexOf("/", 0); i != -1; i = ids.indexOf("/", iIndex)) {
ancestors.add(ids.substring(0,i+1)); ancestors.add(ids.substring(0, i + 1));
iIndex = i+1; iIndex = i + 1;
} }
Filter filter = collection.addFilter(ANCESTORS + " in :ancestors"); 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 // Methods for accessing and linking content item versions
// //
/** /**
* Gets the version tag. * Gets the version tag.
*/ */
@ -820,7 +807,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
ItemCollection versions = getPendingVersions(); ItemCollection versions = getPendingVersions();
try { try {
if ( versions.next() ) { if (versions.next()) {
return versions.getContentItem(); return versions.getContentItem();
} }
return null; return null;
@ -838,13 +825,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/ */
public ItemCollection getPendingVersions() { public ItemCollection getPendingVersions() {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("getPendingVersions: " +getOID()); s_log.debug("getPendingVersions: " + getOID());
} }
DataQuery versions = getSession().retrieveQuery(QUERY_PENDING_ITEMS); DataQuery versions = getSession().retrieveQuery(QUERY_PENDING_ITEMS);
versions.setParameter("itemID", getDraftVersion().getID()); versions.setParameter("itemID", getDraftVersion().getID());
return new ItemCollection return new ItemCollection(new DataQueryDataCollectionAdapter(versions, "item"));
(new DataQueryDataCollectionAdapter(versions, "item"));
} }
/** /**
@ -909,7 +895,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("Getting the live version of " + this); 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()) { if (m_live.isCached()) {
return m_live.get(); return m_live.get();
@ -918,14 +906,13 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
s_log.debug("m_live miss"); s_log.debug("m_live miss");
final DataAssociationCursor versions = final DataAssociationCursor versions =
((DataAssociation) get(VERSIONS)).cursor(); ((DataAssociation) get(VERSIONS)).cursor();
versions.addEqualsFilter(VERSION, LIVE); versions.addEqualsFilter(VERSION, LIVE);
try { try {
if (versions.next()) { if (versions.next()) {
ContentItem item = (ContentItem) ContentItem item = (ContentItem) DomainObjectFactory.newInstance(versions.getDataObject());
DomainObjectFactory.newInstance(versions.getDataObject());
return m_live.set(item); return m_live.set(item);
} }
return m_live.set(null); return m_live.set(null);
@ -992,7 +979,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Publishing methods // Publishing methods
// //
/** /**
* Method to determine whether this ContentItem should * Method to determine whether this ContentItem should
* be automatically published to the file system. * be automatically published to the file system.
@ -1053,19 +1039,19 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
*/ */
public void setLive(final ContentItem version) { public void setLive(final ContentItem version) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Setting item " + this + " live with version " + s_log.debug("Setting item " + this + " live with version "
version); + version);
} }
if (Assert.isEnabled()) { if (Assert.isEnabled()) {
Assert.isTrue(version == null || LIVE.equals(version.getVersion()), Assert.isTrue(version == null || LIVE.equals(version.getVersion()),
"Item version " + version + " must be null or " + "Item version " + version + " must be null or "
"the live version"); + "the live version");
} }
if (isLive()) { if (isLive()) {
s_log.debug("The item is already live; getting the current " + s_log.debug("The item is already live; getting the current "
"live version"); + "live version");
final ContentItem oldVersion = getLiveVersion(); 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 // XXX We don't need to use a custom query here
// anymore. // anymore.
final DataQuery items = final DataQuery items =
SessionManager.getSession().retrieveQuery SessionManager.getSession().retrieveQuery("com.arsdigita.cms.getLiveItemsWithSameParent");
("com.arsdigita.cms.getLiveItemsWithSameParent");
items.addNotEqualsFilter("id", oldVersion.getID()); items.addNotEqualsFilter("id", oldVersion.getID());
items.setParameter("itemId", oldVersion.getID()); items.setParameter("itemId", oldVersion.getID());
@ -1095,8 +1080,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
parent = getParent(); parent = getParent();
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug(oldVersion + " is the last child of " + s_log.debug(oldVersion + " is the last child of "
parent); + parent);
} }
} }
@ -1117,15 +1102,15 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (parent instanceof ContentBundle || parent instanceof Folder) { if (parent instanceof ContentBundle || parent instanceof Folder) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Parent of " + oldVersion + " is " + parent + s_log.debug("Parent of " + oldVersion + " is " + parent
"; unpublishing the parent"); + "; unpublishing the parent");
} }
((ContentItem) parent).setLive( null ); ((ContentItem) parent).setLive(null);
} }
s_log.debug("Setting the live version association to null and " + s_log.debug("Setting the live version association to null and "
"saving"); + "saving");
setLiveVersion(null); setLiveVersion(null);
@ -1133,8 +1118,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
} }
if (version != null) { if (version != null) {
s_log.debug("The new version is not null; setting the live " + s_log.debug("The new version is not null; setting the live "
"version association"); + "version association");
setLiveVersion(version); setLiveVersion(version);
@ -1161,30 +1146,29 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @return the new pending version * @return the new pending version
*/ */
public ContentItem publish(final LifecycleDefinition cycleDef, public ContentItem publish(final LifecycleDefinition cycleDef,
final Date startDate) { final Date startDate) {
applyTag("Published"); applyTag("Published");
Versions.suspendVersioning(); Versions.suspendVersioning();
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Publishing item " + this + " with lifecycle " + s_log.debug("Publishing item " + this + " with lifecycle "
"definition " + cycleDef + " and start date " + + "definition " + cycleDef + " and start date "
startDate); + startDate);
} }
/* amended Chris Gilbert /* amended Chris Gilbert
* *
* Some content types may have their own lifecycles with their own * Some content types may have their own lifecycles with their own
* default listeners. Previous implementation just enforced * default listeners. Previous implementation just enforced
* the listener retrieved from getPublisherClassName. This amendment * the listener retrieved from getPublisherClassName. This amendment
* looks for a default listener in the cycle definition first * looks for a default listener in the cycle definition first
* *
*/ */
String listener = cycleDef.getDefaultListener(); String listener = cycleDef.getDefaultListener();
if (listener == null) { if (listener == null) {
listener = getPublishListenerClassName(); listener = getPublishListenerClassName();
} }
final Lifecycle cycle = cycleDef.createFullLifecycle final Lifecycle cycle = cycleDef.createFullLifecycle(startDate, listener);
(startDate, listener);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Instantiated lifecycle " + cycle); s_log.debug("Instantiated lifecycle " + cycle);
@ -1199,21 +1183,21 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (Assert.isEnabled()) { if (Assert.isEnabled()) {
Assert.exists(pending, ContentItem.class); Assert.exists(pending, ContentItem.class);
Assert.isTrue(PENDING.equals(pending.getVersion()) || Assert.isTrue(PENDING.equals(pending.getVersion())
LIVE.equals(pending.getVersion()), || LIVE.equals(pending.getVersion()),
"The new pending item must be pending or live; " + "The new pending item must be pending or live; "
"instead it is " + pending.getVersion()); + "instead it is " + pending.getVersion());
} }
return pending; return pending;
} }
public String getPublishListenerClassName() { public String getPublishListenerClassName() {
String className = ContentSection.getConfig().getPublishLifecycleListenerClass(); String className = ContentSection.getConfig().getPublishLifecycleListenerClass();
if (className != null && !"".equals(className)) { if (className != null && !"".equals(className)) {
return className; return className;
} else { } else {
return PUBLISH_LISTENER_CLASS; return PUBLISH_LISTENER_CLASS;
} }
} }
/** /**
@ -1230,9 +1214,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
if (isLive()) { if (isLive()) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("The item is currently live; removing the " + s_log.debug("The item is currently live; removing the "
"lifecycle of the public version, " + + "lifecycle of the public version, "
getPublicVersion()); + getPublicVersion());
} }
removeLifecycle(getPublicVersion()); removeLifecycle(getPublicVersion());
@ -1261,37 +1245,37 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Republish the item using its existing lifecycle * Republish the item using its existing lifecycle
*/ */
public void republish() { public void republish() {
republish(false); republish(false);
} }
/** /**
* Republish the item * Republish the item
* @parameter reset - if true create a new lifecycle, if false use existing * @parameter reset - if true create a new lifecycle, if false use existing
* Called from ui.lifecycle.ItemLifecycleItemPane.java * Called from ui.lifecycle.ItemLifecycleItemPane.java
*/ */
public void republish(boolean reset) { public void republish(boolean reset) {
if( s_log.isDebugEnabled() ) { if (s_log.isDebugEnabled()) {
s_log.debug( "Republishing item " + getOID().toString() ); s_log.debug("Republishing item " + getOID().toString());
} }
applyTag( "Republished" ); applyTag("Republished");
Versions.suspendVersioning(); 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(); Lifecycle cycle = getLifecycle();
Assert.exists( cycle, Lifecycle.class ); Assert.exists(cycle, Lifecycle.class);
//resets lifecycle if opted //resets lifecycle if opted
if(reset){ if (reset) {
cycle.reset(); cycle.reset();
} }
if( s_log.isDebugEnabled() ) { if (s_log.isDebugEnabled()) {
s_log.debug( "Reusing lifecycle " + cycle.getOID() ); s_log.debug("Reusing lifecycle " + cycle.getOID());
} }
ContentItem newLive = createPendingVersion( cycle ); ContentItem newLive = createPendingVersion(cycle);
setLive( null ); setLive(null);
promotePendingVersion( newLive ); promotePendingVersion(newLive);
} }
/** /**
@ -1305,9 +1289,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
final Lifecycle lifecycle = LifecycleService.getLifecycle(this); final Lifecycle lifecycle = LifecycleService.getLifecycle(this);
if (lifecycle == null) { if (lifecycle == null) {
if( s_log.isDebugEnabled() ) { if (s_log.isDebugEnabled()) {
s_log.debug("The item has no lifecycle; checking if the " + s_log.debug("The item has no lifecycle; checking if the "
"public version has a lifecycle"); + "public version has a lifecycle");
} }
final ContentItem pub = getPublicVersion(); final ContentItem pub = getPublicVersion();
@ -1320,8 +1304,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
final Lifecycle cyclelife = LifecycleService.getLifecycle(pub); final Lifecycle cyclelife = LifecycleService.getLifecycle(pub);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("The public version has a lifecycle; " + s_log.debug("The public version has a lifecycle; "
"returning " + cyclelife); + "returning " + cyclelife);
} }
return cyclelife; return cyclelife;
@ -1361,7 +1345,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// XXX domlay What is the relation of setLifecycle(Lifecycle) and // XXX domlay What is the relation of setLifecycle(Lifecycle) and
// publish(LifecycleDefinition ...)? It doesn't seem coherent. // publish(LifecycleDefinition ...)? It doesn't seem coherent.
/** /**
* Remove the associated lifecycle. * Remove the associated lifecycle.
*/ */
@ -1370,8 +1353,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// item? // item?
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Removing lifecycle instance from item " + s_log.debug("Removing lifecycle instance from item "
itemToRemove); + itemToRemove);
} }
LifecycleService.removeLifecycle(itemToRemove); LifecycleService.removeLifecycle(itemToRemove);
@ -1394,7 +1377,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Category stuff // Category stuff
// //
/** /**
* @return all categories to which this item belongs * @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); Category root = Category.getRootForObject(getContentSection(), useContext);
if (null == root) { if (null == root) {
s_log.warn("No root category for " + s_log.warn("No root category for "
getContentSection().getOID().toString() + + getContentSection().getOID().toString()
" with context " + useContext); + " with context " + useContext);
return Collections.EMPTY_LIST.iterator(); return Collections.EMPTY_LIST.iterator();
} }
@ -1502,7 +1484,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Versioning stuff // Versioning stuff
// //
/** /**
* Recursively copy this item, creating a clone. * Recursively copy this item, creating a clone.
* Reassign composite associations from the copy to point * 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 * @return the live version for this item
* @see #copyServicesFrom(ContentItem) * @see #copyServicesFrom(ContentItem)
*/ */
public ContentItem copy() { public ContentItem copy() {
return copy(null, false); return copy(null, false);
} }
@ -1545,7 +1526,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
newItem.setParent(newParent); newItem.setParent(newParent);
} }
if (copyServices) { if (copyServices) {
newItem.copyServicesFrom(this); newItem.copyServicesFrom(this);
} }
return newItem; return newItem;
} }
@ -1569,6 +1550,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
return newItem; return newItem;
} }
/** /**
* Transfer services, such as categories, * Transfer services, such as categories,
* from the passed-in item to this item. This method should be * 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 * @param version The new Version to set
*/ */
protected void setVersionRecursively(final String version) { protected void setVersionRecursively(final String version) {
s_log.debug("Recursively updating the version attribute of the " + s_log.debug("Recursively updating the version attribute of the "
"item"); + "item");
new VersionUpdater(version).updateItemVersion(this); new VersionUpdater(version).updateItemVersion(this);
} }
@ -1692,10 +1674,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* @deprecated use {@link #copyProperty(CustomCopy, Property, ItemCopier)} instead * @deprecated use {@link #copyProperty(CustomCopy, Property, ItemCopier)} instead
*/ */
protected final boolean copyProperty(final ContentItem source, protected final boolean copyProperty(final ContentItem source,
final String attribute, final String attribute,
final ItemCopier copier) { final ItemCopier copier) {
throw new UnsupportedOperationException throw new UnsupportedOperationException("use copyProperty(CustomCopy, Property, ItemCopier) for copying");
("use copyProperty(CustomCopy, Property, ItemCopier) for copying");
} }
/** /**
@ -1784,8 +1765,8 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* to copy the property. * to copy the property.
*/ */
public boolean copyProperty(final CustomCopy source, public boolean copyProperty(final CustomCopy source,
final Property property, final Property property,
final ItemCopier copier) { final ItemCopier copier) {
String attribute = property.getName(); String attribute = property.getName();
if (CHILDREN.equals(attribute)) { if (CHILDREN.equals(attribute)) {
return true; return true;
@ -1812,7 +1793,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// If live Bundle already exists, recategorize. // If live Bundle already exists, recategorize.
if (PARENT.equals(attribute)) { if (PARENT.equals(attribute)) {
ACSObject parent = ((ContentItem)source).getParent(); ACSObject parent = ((ContentItem) source).getParent();
if (parent != null && copier.getCopyType() == ItemCopier.VERSION_COPY) { if (parent != null && copier.getCopyType() == ItemCopier.VERSION_COPY) {
if (parent instanceof ContentBundle) { if (parent instanceof ContentBundle) {
@ -1825,14 +1806,14 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
Set draftCatSet = new HashSet(); Set draftCatSet = new HashSet();
CategoryCollection liveCategories = CategoryCollection liveCategories =
liveBundle.getCategoryCollection(); liveBundle.getCategoryCollection();
while (liveCategories.next()) { while (liveCategories.next()) {
liveCatSet.add(liveCategories.getCategory()); liveCatSet.add(liveCategories.getCategory());
} }
liveCategories.close(); liveCategories.close();
CategoryCollection draftCategories = CategoryCollection draftCategories =
bundle.getCategoryCollection(); bundle.getCategoryCollection();
while (draftCategories.next()) { while (draftCategories.next()) {
draftCatSet.add(draftCategories.getCategory()); draftCatSet.add(draftCategories.getCategory());
} }
@ -1891,7 +1872,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Multilingual content // Multilingual content
// //
/** /**
* Language of the content item. * Language of the content item.
* *
@ -1924,10 +1904,9 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// slp.getLocale() // slp.getLocale()
try { try {
locale = Locale.fromJavaLocale locale = Locale.fromJavaLocale(new java.util.Locale(getLanguage(), ""));
(new java.util.Locale(getLanguage(),""));
} catch (GlobalizationException e) { } catch (GlobalizationException e) {
s_log.warn ("GlobalizationException thrown in getLocale()", e); s_log.warn("GlobalizationException thrown in getLocale()", e);
throw new UncheckedWrapperException(e.getMessage()); throw new UncheckedWrapperException(e.getMessage());
} }
@ -1960,7 +1939,6 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Deprecated methods and classes // Deprecated methods and classes
// //
/** /**
* Assert that this item is a top-level master object * Assert that this item is a top-level master object
* @deprecated with no replacement * @deprecated with no replacement
@ -1972,11 +1950,11 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// //
// Private utility methods and classes // Private utility methods and classes
// //
/** /**
* Caches a version of this item. * Caches a version of this item.
*/ */
private class VersionCache { private class VersionCache {
private ContentItem m_version; private ContentItem m_version;
private boolean m_cached; private boolean m_cached;
@ -2007,18 +1985,20 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
m_cached = false; m_cached = false;
} }
} }
/** /**
* Remove any Links pointing to this item before deletion. * Remove any Links pointing to this item before deletion.
* XXX This should go away when one-way association targets can * XXX This should go away when one-way association targets can
* specify the equivalent of on delete set null * specify the equivalent of on delete set null
*/ */
@Override
protected void beforeDelete() { protected void beforeDelete() {
super.beforeDelete(); super.beforeDelete();
// remove Link associations to this // remove Link associations to this
DataCollection dc = SessionManager.getSession().retrieve(Link.BASE_DATA_OBJECT_TYPE); DataCollection dc = SessionManager.getSession().retrieve(Link.BASE_DATA_OBJECT_TYPE);
dc.addEqualsFilter(Link.TARGET_ITEM+"." + ACSObject.ID, dc.addEqualsFilter(Link.TARGET_ITEM + "." + ACSObject.ID,
getID()); getID());
while (dc.next()) { while (dc.next()) {
Link link = (Link) DomainObjectFactory.newInstance(dc.getDataObject()); Link link = (Link) DomainObjectFactory.newInstance(dc.getDataObject());
link.setTargetItem(null); link.setTargetItem(null);
@ -2026,26 +2006,23 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
// remove ContentGroup associations to this // remove ContentGroup associations to this
dc = SessionManager.getSession().retrieve(ContentGroupAssociation.BASE_DATA_OBJECT_TYPE); dc = SessionManager.getSession().retrieve(ContentGroupAssociation.BASE_DATA_OBJECT_TYPE);
dc.addEqualsFilter(ContentGroupAssociation.CONTENT_ITEM+"." + ACSObject.ID, dc.addEqualsFilter(ContentGroupAssociation.CONTENT_ITEM + "." + ACSObject.ID,
getID()); getID());
while (dc.next()) { while (dc.next()) {
ContentGroupAssociation groupAssoc = (ContentGroupAssociation) DomainObjectFactory.newInstance(dc.getDataObject()); ContentGroupAssociation groupAssoc = (ContentGroupAssociation) DomainObjectFactory.newInstance(dc.getDataObject());
groupAssoc.setContentItem(null); groupAssoc.setContentItem(null);
} }
} }
/** /**
* Overriding the Auditing interface in order to use the denormalized * Overriding the Auditing interface in order to use the denormalized
* information * information
*/ */
/** /**
* Gets the user who created the object. May be null. * Gets the user who created the object. May be null.
* @return the user who created the object. * @return the user who created the object.
*/ */
@Override
public User getCreationUser() { public User getCreationUser() {
return m_audit_trail.getCreationUser(); return m_audit_trail.getCreationUser();
} }
@ -2054,7 +2031,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the creation date of the object. * Gets the creation date of the object.
* @return the creation date. * @return the creation date.
*/ */
@Override
public Date getCreationDate() { public Date getCreationDate() {
return m_audit_trail.getCreationDate(); return m_audit_trail.getCreationDate();
} }
@ -2064,7 +2041,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* null. * null.
* @return the creation IP address. * @return the creation IP address.
*/ */
@Override
public String getCreationIP() { public String getCreationIP() {
return m_audit_trail.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. * Gets the user who last modified the object. May be null.
* @return the last modifying user. * @return the last modifying user.
*/ */
@Override
public User getLastModifiedUser() { public User getLastModifiedUser() {
return m_audit_trail.getLastModifiedUser(); return m_audit_trail.getLastModifiedUser();
} }
@ -2082,7 +2059,7 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
* Gets the last modified date. * Gets the last modified date.
* @return the last modified date. * @return the last modified date.
*/ */
@Override
public Date getLastModifiedDate() { public Date getLastModifiedDate() {
return m_audit_trail.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. * Gets the last modified IP address. May be null.
* @return the IP address associated with the last modification. * @return the IP address associated with the last modification.
*/ */
@Override
public String getLastModifiedIP() { public String getLastModifiedIP() {
return m_audit_trail.getLastModifiedIP(); return m_audit_trail.getLastModifiedIP();
} }
protected static List extraXMLGenerators = new ArrayList(); protected static List extraXMLGenerators = new ArrayList();
/** /**
@ -2106,4 +2082,12 @@ public class ContentItem extends VersionedACSObject implements CustomCopy {
public List getExtraXMLGenerators() { public List getExtraXMLGenerators() {
return extraXMLGenerators; return extraXMLGenerators;
} }
public boolean hasRelationAttributes() {
return !RELATION_ATTRIBUTES.isEmpty();
}
public StringTokenizer getRelationAttributes() {
return new StringTokenizer(RELATION_ATTRIBUTES, ";");
}
} }

View File

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

View File

@ -23,23 +23,27 @@ import com.arsdigita.persistence.DataObject;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ContentPage; import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.StringTokenizer;
/** /**
* This content type represents an basic contact * This content type represents an basic contact
* *
*/ */
public class GenericContact extends ContentPage { public class GenericContact extends ContentPage implements RelationAttribute {
/** PDL property names */ /** PDL property names */
public static final String PERSON = "person"; public static final String PERSON = "person";
public static final String ADDRESS = "address"; public static final String ADDRESS = "address";
public static final String CONTACT_ENTRIES = "contactentries"; public static final String CONTACT_ENTRIES = "contactentries";
private static final String RELATION_ATTRIBUTES = "GenericContactType;GenericContactEntryType";
// Config // Config
private static final GenericContactConfig s_config = new GenericContactConfig(); private static final GenericContactConfig s_config = new GenericContactConfig();
static { static {
@ -140,4 +144,14 @@ public class GenericContact extends ContentPage {
public boolean hasContactEntries() { public boolean hasContactEntries() {
return !this.getContactEntries().isEmpty(); return !this.getContactEntries().isEmpty();
} }
@Override
public boolean hasRelationAttributes() {
return !RELATION_ATTRIBUTES.isEmpty();
}
@Override
public StringTokenizer getRelationAttributes() {
return new StringTokenizer(RELATION_ATTRIBUTES, ";");
}
} }

View File

@ -16,25 +16,27 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
*/ */
package com.arsdigita.cms.contenttypes; package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ContentPage; import com.arsdigita.cms.ContentPage;
import com.arsdigita.cms.RelationAttribute;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.StringTokenizer;
import java.util.Date; import java.util.Date;
/** /**
* Basic GenericPerson Contenttype for OpenCCM. * Basic GenericPerson Contenttype for OpenCCM.
* *
* @author Sören Bernstein
* @author Jens Pelzetter * @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 PERSON = "person";
public static final String SURNAME = "surname"; 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 CONTACTS = "contacts";
public static final String CONTACT_TYPE = "contact_type"; public static final String CONTACT_TYPE = "contact_type";
public static final String CONTACT_ORDER = "contact_order"; public static final String CONTACT_ORDER = "contact_order";
private static final String RELATION_ATTRIBUTES = "GenericContactType";
/** Data object type for this domain object */ /** Data object type for this domain object */
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.GenericPerson"; public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.contenttypes.GenericPerson";
/** /**
* Default constructor. This creates a new (empty) GenericPerson. * Default constructor. This creates a new (empty) GenericPerson.
**/ **/
@ -80,34 +83,25 @@ public class GenericPerson extends ContentPage {
} }
/* accessors *****************************************************/ /* accessors *****************************************************/
public String getSurname() { public String getSurname() {
return (String)get(SURNAME); return (String) get(SURNAME);
} }
public void setSurname(String surname) {
set(SURNAME, surname);
}
public String getGivenName() { public void setSurname(String surname) {
return (String)get(GIVENNAME); set(SURNAME, surname);
} }
public void setGivenName(String givenName) {
set(GIVENNAME, givenName);
}
public String getTitlePre() { public String getGivenName() {
return (String)get(TITLEPRE); return (String) get(GIVENNAME);
} }
public void setTitlePre(String titlePre) {
set(TITLEPRE, titlePre);
}
public String getTitlePost() { public void setGivenName(String givenName) {
return (String)get(TITLEPOST); set(GIVENNAME, givenName);
} }
public void setTitlePost(String titlePost) {
set(TITLEPOST, titlePost);
}
public String getTitlePre() {
return (String) get(TITLEPRE);
}
public Date getBirthdate() { public Date getBirthdate() {
return (Date)get(BIRTHDATE); return (Date)get(BIRTHDATE);
} }
@ -115,6 +109,18 @@ public class GenericPerson extends ContentPage {
set(BIRTHDATE, birthdate); 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 // Get all contacts for this person
public GenericPersonContactCollection getContacts() { public GenericPersonContactCollection getContacts() {
return new GenericPersonContactCollection((DataCollection) get(CONTACTS)); return new GenericPersonContactCollection((DataCollection) get(CONTACTS));
@ -140,4 +146,13 @@ public class GenericPerson extends ContentPage {
return !this.getContacts().isEmpty(); return !this.getContacts().isEmpty();
} }
@Override
public boolean hasRelationAttributes() {
return !RELATION_ATTRIBUTES.isEmpty();
}
@Override
public StringTokenizer getRelationAttributes() {
return new StringTokenizer(RELATION_ATTRIBUTES, ";");
}
} }

View File

@ -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&nbsp;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=<i>niemand</i>
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&nbsp;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=&nbsp;(zur\u00fcck)&nbsp;
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&nbsp;Purposes:
cms.ui.category.available_purposes=Available&nbsp;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=<h2>Content Section Configuration</h2>
cms.ui.content_types=Dokumenttypen
cms.ui.cse=Bald abgelaufen
cms.ui.cse.authorName=Verfasser
cms.ui.cse.itemName=Name
cms.ui.cse.view=Anzeigen
cms.ui.cse.viewLink=anzeigen
cms.ui.cse.edit=Edit
cms.ui.cse.editLink=edit
cms.ui.cse.endDateTime=aktiv bis
cms.ui.user_admin=Benutzerverwaltung
cms.ui.contents_of=Inhalt von
cms.ui.create=Erstellen
cms.ui.default_locale=Voreingestellte Sprache\:
cms.ui.delete=L\u00f6schen
cms.ui.description=Beschreibung
cms.ui.edit=Bearbeiten
cms.ui.edit_folder=Aktuellen Ordner umbenennen
cms.ui.email=Email
cms.ui.enter_a_keyword=Schl\u00fcsselwort eingeben:
cms.ui.enter_first_name_last_name_andor_email_address=Enter first name, last name, and/or email address:
cms.ui.enter_first_name_last_name_email_address_andor_group_name=Enter first name, last name, email address and/or Group Name:
cms.ui.failed_to_create_new_dp_item=Failed to create a new DP Item.
cms.ui.failed_to_fetch_content_section_for_item=Failed to fetch the content section for the item:
cms.ui.failed_to_fetch_content_type=Failed to fetch content type for
cms.ui.failed_to_find_java_class_for_authoring_component=Failed to find the Java class for this authoring step component:
cms.ui.failed_to_generate_new_id=Failed to generate a new sequence ID.
cms.ui.failed_to_instantiate_authoring_component=Failed to instantiate this authoring step component:
cms.ui.failed_to_retrieve=Failed to retrieve:
cms.ui.failed_to_validate_title_uniqueness=Failed to validate title uniqueness
cms.ui.finish=Beenden
cms.ui.folder.cancelled=Abgebrochen
cms.ui.folder.cannot_find_a_root_folder=Kein Wurzelverzeichnis gefunden.
cms.ui.folder.na=K.A.
cms.ui.folder.no_source_items_specified=Kein Quelldokument angegeben.
cms.ui.folder.parent=\u00dcbergeordneter Ordner
cms.ui.folder.rename=Ornder umbenennen
cms.ui.folder_browser=Ordner durchsehen
cms.ui.for=for
cms.ui.formbuilder.description=Beschreibung:
cms.ui.formbuilder.name=Name:
cms.ui.formbuilder.oh_no_you_dont=Oh no you don't
cms.ui.formbuilder.title=Titel\:
cms.ui.help=Hilfe
cms.ui.history.history=Verlauf
cms.ui.history.no_history=Kein Verlauf
cms.ui.history.preview=Vorschau
cms.ui.history.rollback=Rollback
cms.ui.insufficient_privileges=Unzureichende Rechte
cms.ui.invalid_item_id=Ung\u00fcltiges Objekt Id\:{0}
cms.ui.item=Dokument
cms.ui.item.access_denied=Zugriff verweigert.
cms.ui.item.apply_a_lifecycle=Lebenszyklus zuordnen
cms.ui.item.authoring=Verfassen
cms.ui.item.categories.assigned=Zugewiesene Kategorien
cms.ui.item.categories.available=Verf\u00fcgbare Kategorien
cms.ui.item.current_row_does_not_exist=Aktuelle Zeile existiert nicht
cms.ui.item.edit_lifecycle=Lebenszyklus bearbeiten
cms.ui.item.end_date=Ende am\:&nbsp;&nbsp;
cms.ui.item.end_time=Ende um\:&nbsp;&nbsp;
cms.ui.item.end_time_incomplete=Zeitangabe unvollst\u00e4ndig
cms.ui.item.history=Historie
cms.ui.item.invalid_end_date_please_try_again=Ung\u00fcltiges Enddatum, bitte erneut versuchen
cms.ui.item.invalid_start_date_please_try_again=Un\u00fcltiges Anfangsdatum, bitte erneut versuchen
cms.ui.item.language.add=Sprache hinzuf\u00fcgen
cms.ui.item.language.change=Sprache \u00e4ndern
cms.ui.item.languages=Sprachen
cms.ui.item.lifecycle.apply=Anzuwendenden Lebenszyklus ausw\u00e4hlen
cms.ui.item.lifecycle.end_date=Enddatum
cms.ui.item.lifecycle.end_time=Ende um
cms.ui.item.lifecycle.intro=Dieses Dokument ist gegenw\u00e4rtig nicht publiziert.
cms.ui.item.lifecycle.publish=Dokument publizieren
cms.ui.item.lifecycle.republish=Dokument erneut publizieren
cms.ui.item.lifecycle.start_date=Anfangsdatum
cms.ui.item.lifecycle.start_time=Beginn um
cms.ui.item.lifecycle.unpublish=Dokument zur\u00fcckziehen
cms.ui.item.lifecycle=Lebenszyklus
cms.ui.item.lifecycles=Ver\u00f6ffentlichen
cms.ui.item.preview=Vorschau
cms.ui.item.reapply_a_lifecycle=Lebenszyklus erneut anwenden
cms.ui.item.revision.added=Hinzugef\u00fcgt zu
cms.ui.item.revision.current=Gegenw\u00e4rtige Ausgabe
cms.ui.item.revision.difference.show=Unterschiede anzeigen
cms.ui.item.revision.first=Urspr\u00fcngliche Ausgabe
cms.ui.item.revision.from=Von
cms.ui.item.revision.from_is_null='Von' Ausgabe ist notwendig
cms.ui.item.revision.none=Dieses Dokument hat keine Ausgaben
cms.ui.item.revision.nothing=nichts
cms.ui.item.revision.operation.change=\u00c4ndern
cms.ui.item.revision.operation.new_value=Neuer Wert
cms.ui.item.revision.operation.none=Keine Operationen vorhanden
cms.ui.item.revision.operation.object=Objekt
cms.ui.item.revision.operation.old_value=Alter Wert
cms.ui.item.revision.operation.property=Eigenschaft
cms.ui.item.revision.operation.value=Wert
cms.ui.item.revision.operation=Operation
cms.ui.item.revision.operations=Operations
cms.ui.item.revision.removed=Removed From
cms.ui.item.revision.return=Return to revisions
cms.ui.item.revision.rollback=Rollback
cms.ui.item.revision.rolled_back=Rolled back
cms.ui.item.revision.to=Zu
cms.ui.item.revision.to_is_null=Eine 'zu' Revision ist erforderlich
cms.ui.item.revision.view=Ansicht
cms.ui.item.revision=Revision
cms.ui.item.revisions=Revisionen
cms.ui.item.start_date=Anfangsdatum\:&nbsp;&nbsp;
cms.ui.item.start_time=Anfangszeit\:&nbsp;&nbsp;
cms.ui.item.start_time_incomplete=Anfangszeit unvollst\u00e4ndig
cms.ui.item.submission_cancelled=Prozess unterbrochen
cms.ui.item.summary=Zusammenfassung
cms.ui.item.templates=Vorlage
cms.ui.item.the_current_row_does_not_exists=Die aktuelle Zeile existiert nicht
cms.ui.item.workflow=Arbeitsablauf
cms.ui.item.workflow.start=Arbeitsablauf starten
cms.ui.item.workflow.stop=Arbeitsablauf stoppen
cms.ui.item_name_already_in_folder=Dieser Titel wird von einem anderen Objekt in diesem Ordner benutzt\:
cms.ui.label=Etikett
cms.ui.label_prompt=Etikett\:
cms.ui.language.field=Sprache\:
cms.ui.language.header=Sprache
cms.ui.language_instance.change=Sprache \u00e4ndern
cms.ui.language_instance.new=Neue Sprachinstanz
cms.ui.language_instances=Sprachinstanz
cms.ui.lifecycle.add=Add lifecycle
cms.ui.lifecycle.add=Neuen Lebenszyklus erstellen
cms.ui.lifecycle.add_a_phase=Eine Phase hinzuf\u00fcgen
cms.ui.lifecycle.create_a_lifecycle=Einen Lebenszyklus erstellen
cms.ui.lifecycle.days=Tage
cms.ui.lifecycle.delete_prompt=Sind Sie sicher, diesen Lebenszyklus zu l\u00f6schen?
cms.ui.lifecycle.delete=Lebenszyklus l\u00f6schen
cms.ui.lifecycle.description=Beschreibung
cms.ui.lifecycle.details=Lebenszyklus Einzelheiten
cms.ui.lifecycle.duration=Dauer
cms.ui.lifecycle.edit=Lebenszyklus beareiten
cms.ui.lifecycle.forever=Unbegrenzt
cms.ui.lifecycle.hours=Stunden
cms.ui.lifecycle.intro=Einen Lebenszyklus ausw\u00e4hlen oder neu erstellen
cms.ui.lifecycle.label=Etikett\:
cms.ui.lifecycle.lifecycle_information=Lebenszyklus Information
cms.ui.lifecycle.lifecycles=Lebenszyklen
cms.ui.lifecycle.mins=Minuten
cms.ui.lifecycle.name=Name
cms.ui.lifecycle.name_not_unique=Es gibt bereits einen Lebenszyklus mit diesem Namen
cms.ui.lifecycle.no_lifecycles_defined_for_this_section=Keine Lebenszyklen f\u00fcr diesen Bereich definiert.
cms.ui.lifecycle.no_phases=Dieser Lebenszyklus hat keine Phasen
cms.ui.lifecycle.phase.add=Eine Phase hinzuf\u00fcgen
cms.ui.lifecycle.phase.days=Tage
cms.ui.lifecycle.phase.delay=Verzug
cms.ui.lifecycle.phase.delete=Phase l\u00f6schen
cms.ui.lifecycle.phase.duration=Dauer
cms.ui.lifecycle.phase.duration_negative=Die Dauer muss gr\u00f6\u00dfer als Null sein.
cms.ui.lifecycle.phase.edit=Phase bearbeiten
cms.ui.lifecycle.phase.hours=Std.
cms.ui.lifecycle.phase.mins=Min.
cms.ui.lifecycle.phase.name_not_unique=Es gibt bereits eine Phase mit diesemNamen
cms.ui.lifecycle.phase.none=Dieser Lebenszyklus hat keine Phasen
cms.ui.lifecycle.phase.start_delay=Start delay
cms.ui.lifecycle.phase_add=Phase hinzuf\u00fcgen
cms.ui.lifecycle.phase_delay=Delay
cms.ui.lifecycle.phase_delete=Phase l\u00f6schen
cms.ui.lifecycle.phase_description=Beschreibung
cms.ui.lifecycle.phase_duration=Dauer
cms.ui.lifecycle.phase_edit=Phase editieren
cms.ui.lifecycle.phase_name=Name
cms.ui.lifecycle.phases=Phasen
cms.ui.lifecycle.start_delay=Start Delay:
cms.ui.lifecycle_date_error_msg=Das Anfangsdatum des Lebenszyklus muss vor dem Enddatum liegen.
cms.ui.lifecycles=Lebenszyklen
cms.ui.locales=Locales:
cms.ui.logout_failed=Abmeldung fehlgeschlagen
cms.ui.matches=Treffer
cms.ui.max_launch=H\u00f6chstes Startdatum
cms.ui.min_launch=Kleinstes Startdatum
cms.ui.my_workspace=Mein Portal
cms.ui.name=Name
cms.ui.name_prompt=Name:
cms.ui.need_category_map_privilege=Need categorize items privilege on that category
cms.ui.new_folder=Neuen Ordner erstellen
cms.ui.new_item=Neues Element
cms.ui.no=Nein
cms.ui.no_content_section_for_page=Kein Inhaltsbereich f\u00fcr die Seite
cms.ui.no_items_matched_the_search=Keine Objekte erf\u00fcllen die Suchkriterien
cms.ui.none=Keine
cms.ui.parent=Eltern
cms.ui.permissions.add_administrator=Administrator hinzuf\u00fcgen
cms.ui.permissions.cannot_add_user=Kann Benutzer nicht hinzuf\u00fcgen
cms.ui.permissions.cannot_retrieve_party=Cannot retrieve party
cms.ui.permissions.column_index=Spaltenindex
cms.ui.permissions.could_not_find_this_object=Konnte dieses Objekt nicht finden
cms.ui.permissions.current_object_is_null=Aktuelles Objekt ist null\!
cms.ui.permissions.no_users_were_selected=Keine Benutzer gew\u00e4hlt
cms.ui.permissions.not_an_object_adminstrator=Kein Objekt Administrator
cms.ui.permissions.out_of_bounds= Au\u00dferhalb der Grenzwerte
cms.ui.permissions.remove=entfernen
cms.ui.permissions.return_to_object_info=Zur\u00fcck zur Objekt Information
cms.ui.permissions.these_are_the_current_permissions_for_this_folder=Aktuelle Rechte f\u00fcr diesen Ordner\:
cms.ui.permissions.these_are_the_custom_permissions_that_have_been_granted_on_this_object=These are the custom permissions that have been granted on this object.
cms.ui.permissions=Zugriffsrechte
cms.ui.preview=Vorschau
cms.ui.primary_instance=Primary Instance
cms.ui.remove=Entfernen
cms.ui.restore_default_permissions=Default Rechte wiederherstellen
cms.ui.role.add=Rolle hinzuf\u00fcgen
cms.ui.role.admin.add=Administrator hinzuf\u00fcgen
cms.ui.role.admin.email=Email
cms.ui.role.admin.name=Name
cms.ui.role.admin.none=Diese Rolle hat keine Administratoren
cms.ui.role.admin.remove=Administrator l\u00f6schen
cms.ui.role.admins=Administratoren
cms.ui.role.delete=Rolle l\u00f6schen
cms.ui.role.delete_prompt=Diese Rolle wirklich l\u00f6schen?
cms.ui.role.description=Beschreibung
cms.ui.role.details=Details der Rolle
cms.ui.role.edit=Rolle bearbeiten
cms.ui.role.intro=Eine Rolle als Bearbeiter oder Betrachter ausw\u00e4hlen oder eine neue erstellen
cms.ui.role.member.add=Mitglied hinzuf\u00fcgen
cms.ui.role.member.email=Email
cms.ui.role.member.name=Name
cms.ui.role.member.none=Diese Rolle hat keine Mitglieder
cms.ui.role.member.remove=Mitglied entfernen
cms.ui.role.members=Mitglieder
cms.ui.role.name_not_unique=Eine Rolle mit diesem Namen existiert
cms.ui.role.no_party_selected=Keinen Benutzer oder Gruppe ausgew\u00e4hlt
cms.ui.role.privilege.none=Diese Rolle hat keine Berechtigungen
cms.ui.role.privileges=Berechtigungen
cms.ui.role.staff.add=Bearbeiterrolle hinzuf\u00fcgen
cms.ui.role.staff=Bearbeiterrollen
cms.ui.role.viewer.add=Hinzuf\u00fcgen einer Betrachter Rolle
cms.ui.role.viewers=Betrachter Rollen
cms.ui.roles=Rollen
cms.ui.save=Sichern
cms.ui.search=Suche
cms.ui.search_prompt=Suche um neue Mitglieder zu erg\u00e4nzen
cms.ui.search_to_add_new_members=Suche um neue Mitglieder zu erg\u00e4nzen
cms.ui.search_errors.empty_terms=Bitte Suchbegriffe eingeben
cms.ui.search_errors.bad_terms=Your search terms contain illegal words or characters
cms.ui.select_one=--ausw\u00e4hlen--
cms.ui.sign_out=Abmelden
cms.ui.staff.add_member=Mitglied hinzuf\u00fcgen
cms.ui.staff.add_role=Neue Rolle erstellen
cms.ui.staff.create_a_role=Rolle erstellen
cms.ui.staff.delete_confirmation_prompt=Sind Sie sicher, diese Rolle zu l\u00f6schen?
cms.ui.staff.description=Beschreibung
cms.ui.staff.edit_a_role=Eine Rolle bearbeiten
cms.ui.staff.edit_role=Rolle bearbeiten
cms.ui.staff.label=Etikett
cms.ui.staff.no_roles_defined=Es sind keine Rollen f\u00fcr diesen Abschnitt definiert
cms.ui.staff.privileges=Berechtigungen
cms.ui.staff.remove=Entfernen
cms.ui.staff.role_description=Beschreibung
cms.ui.staff.role_details=Rolleneinzelheiten
cms.ui.staff.role_intro=Eine Rolle ausw\u00e4hlen oder eine neue erstellen
cms.ui.staff.role_members=Rollen Mitglieder
cms.ui.staff.role_name=Name
cms.ui.staff.roles=Rollen
cms.ui.staff.there_are_no_administrators_for_this_role=Es gibt keine Administratoren f\u00fcr diese Rolle
cms.ui.submission_cancelled=Prozess abgebrochen
cms.ui.templates.assign_a_template_to=Ein Muster zuweisen an
cms.ui.templates.assign_template=Muster Zuordnen
cms.ui.templates.assign_this_template=Dieses Muster zuordnen
cms.ui.templates.assigned_templates=Zugeordnete Muster
cms.ui.templates.default=Vorgabe
cms.ui.templates.dummy=dummy
cms.ui.templates.label=Etikett\:
cms.ui.templates.name=Name:
cms.ui.templates.no_templates=Keine Muster
cms.ui.templates.not_implemented=Nicht Implementiert
cms.ui.templates.preview=Vorschau
cms.ui.templates.remove=Entfernen
cms.ui.templates.set_as_default=Als Vorgabe festlegen
cms.ui.templates.use_context=Benutze&nbsp;Context\:
cms.ui.the_model_is_empty=Das Modell ist leer
cms.ui.there_are_no_items=Keine elemente vorhanden.
cms.ui.there_was_no_one_matching_the_search_criteria=Kein Element erf\u00fcllte die Suchkriterien.
cms.ui.this_should_never_happen=Dies sollte nie passieren\!
cms.ui.type.add=Inhaltstyp hinzuf\u00fcgen
cms.ui.type.authoringkit=Authoring kit details
cms.ui.type.select=Inhaltstyp ausw\u00e4hlen
cms.ui.type.define=Neuen Inhaltstyp definieren
cms.ui.type.select.none=Keine verf\u00fcgbaren Inhaltstypen zur Auswahl
cms.ui.type.association_content_type=Association content type
cms.ui.type.available_types=Verf\u00fcgbare Inhaltstypen
cms.ui.type.class_name=Java Klassenname
cms.ui.type.data_entry_method=Data entry method
cms.ui.type.default_date=Voreingestelltes Datum
cms.ui.type.delete=Typ l\u00f6schen
cms.ui.type.delete_prompt=Sind Sie sicher, diesen Inhaltstyp zu l\u00f6schen?
cms.ui.type.details=Inhaltstyp Einzelheiten
cms.ui.type.edit=Inhaltstyp bearbeiten
cms.ui.type.element.delete=Element l\u00f6schen
cms.ui.type.element.type=Element Typ
cms.ui.type.element.value_required=Wert erforderlich?
cms.ui.type.elements=Elemente
cms.ui.type.from=Von
cms.ui.type.intro=Inhaltstyp ausw\u00e4hlen oder neu erstellen
cms.ui.type.invalid=Ung\u00fcltiger Inhaltstyp
cms.ui.type.label=Label
cms.ui.type.lifecycle.none=This content type has no default lifecycle
cms.ui.type.lifecycle=Voreingestellter Zyklus
cms.ui.type.maximum_length=Maximale L\u00e4nge
cms.ui.type.name_has_whitespace=Der Name darf keine Leerzeichen enthalten
cms.ui.type.name_not_alphanumeric=Der Name darf nur aus Buchstaben und Zahlen bestehen, keine Satzzeichen
cms.ui.type.name_not_unique=Dieser Inhaltstyp hat bereits ein Element mit dem Namen
cms.ui.type.duplicate_type=Es gibt bereits einen Typ mit Namen "{0}"
cms.ui.type.object_type=Objekttyp
cms.ui.type.parent.none=Dieser Inhaltstyp hat keine Eltern
cms.ui.type.parent=Eltern des Inhaltstyp
cms.ui.type.template.add=Muster hinzuf\u00fcgen
cms.ui.type.templates=Muster
cms.ui.type.title=Titel
cms.ui.type.to=An
cms.ui.type.workflow.none=Dieser Inhaltstyp hat keinen voreingestellten Arbeitsablauf
cms.ui.type.workflow=Voreingestellter Arbeitsablauf
cms.ui.type.year_is_negative=Das Jahr kann nicht negativ sein
cms.ui.type.year_range=Jahresbereich
cms.ui.type.year_range_not_balanced=Eines der Jahre im angegebenen Bereich fehlt
cms.ui.type.year_range_too_great=Der spezifizierte Bereichist zu gro\u00df
cms.ui.type.year_range_wrong_order=Die Jahreszahlen im Bereich sind ungeordnet
cms.ui.type.year_too_anachronistic=Der Datumsbereich erscheint falsch
cms.ui.types=Inhaltstypen
cms.ui.unknown=<i>unbekannt</i>
cms.ui.upload_new_content=Neuen Inhalt laden
cms.ui.use_custom_permissions=Benutzerspezifische Rechte
cms.ui.user=Benutzer
cms.ui.user_not_found=Benutzer nicht gefunden
cms.ui.util.=&nbsp;
cms.ui.view_all_enabled_tasks=View all enabled tasks
cms.ui.view_all_enabled_tasks=Alle {0} aktivierten Aufgaben anzeigen
cms.ui.view_tasks_sorted_by_due_date=Aufgaben anzeigen nach F\u00e4lligkeit
cms.ui.viewers=Betrachter
cms.ui.welcome=Willkommen
cms.ui.worfklow.task_roles=Zugewiesene Rollen
cms.ui.workflow.add=Arbeitsablauf hinzuf\u00fcgen
cms.ui.workflow.add_a_new_task_to=Neue Aufgabe hinzuf\u00fcgen f\u00fcr
cms.ui.workflow.add_task=Aufgabe hinzuf\u00fcgen
cms.ui.workflow.assign_roles_for=Rollen zuweisen an
cms.ui.workflow.cancel_hit=Abbruch anklicken
cms.ui.workflow.comment=Kommentar
cms.ui.workflow.current_state=Aktueller Status
cms.ui.workflow.delete=Arbeitsablauf l\u00f6schen
cms.ui.workflow.delete_prompt=Sind Sie sicher, diesen Arbeitsablauf zu l\u00f6schen?
cms.ui.workflow.delete_user=Benutzer l\u00f6schen
cms.ui.workflow.delete_workflow=Arbeitsablauf l\u00f6schen
cms.ui.workflow.description=Beschreibung
cms.ui.workflow.details=Arbeitsablauf Einzelheiten
cms.ui.workflow.edit=Arbeitsablauf bearbeiten
cms.ui.workflow.edit_task_in=Bearbeitung der Aufgabe in
cms.ui.workflow.insufficient_privileges=Insufficient privileges
cms.ui.workflow.insufficient_privileges=Sie haben unzureichende Rechte
cms.ui.workflow.intro=Arbeitsablauf w\u00e4hlen oder einen neuen hinzuf\u00fcgen
cms.ui.workflow.lock_tasks=Meine Aufgaben f\u00fcr diesen Inhaltstyp reservieren
cms.ui.workflow.no_users_were_selected=Keine Benutzer ausgew\u00c4hlt
cms.ui.workflow.no_users_were_selected=Keine Benutzer ausgew\u00e4hlt.
cms.ui.workflow.num_tasks=Anzahl der Aufgaben
cms.ui.workflow.restart_stopped_workflow=Gestoppter Arbeitsablauf erneut starten
cms.ui.workflow.stop_workflow=Arbeitsablauf stoppen
cms.ui.workflow.task.add=Aufgabe hinzuf\u00fcgen
cms.ui.workflow.task.approve=Akzeptieren
cms.ui.workflow.task.approve_prompt=Diesen Text akzeptieren?
cms.ui.workflow.task.assigned.lock_all=Alle meine Aufgaben zu diesem Punkt reservieren
cms.ui.workflow.task.assigned.none=Sie haben keine zugeordneten Aufgaben
cms.ui.workflow.task.assigned.unlock_all=Alle meine Aufgaben zu diesem Punkt freigeben
cms.ui.workflow.task.assigned=Ihre zugeordneten Aufgaben
cms.ui.workflow.task.comment.add=Kommentar hinzuf\u00fcgen
cms.ui.workflow.task.delete=Aufgabe l\u00f6schen
cms.ui.workflow.task.delete_prompt=Sind Sie sicher diese Aufgabe zu l\u00f6schen?
cms.ui.workflow.task.dependencies=Abh\u00e4ngigkeiten
cms.ui.workflow.task.details=Aufgabendetails
cms.ui.workflow.task.edit=Aufgabe bearbeiten
cms.ui.workflow.task.finish=Aufgabe abschlie\u00dfen
cms.ui.workflow.task.lock=Aufgabe reservieren
cms.ui.workflow.task.locked=Reserviert?
cms.ui.workflow.task.none=This workflow has no tasks
cms.ui.workflow.task.reject=Zur\u00fcckweisen
cms.ui.workflow.task.return=Zur\u00fcck zum Punkt Arbeitsablauf
cms.ui.workflow.task.role.add=Rolle hinzuf\u00fcgen
cms.ui.workflow.task.role.delete=Rolle l\u00f6schen
cms.ui.workflow.task.role.none=Diese Aufgabe verf\u00fcgt \u00fcber keine Rollen
cms.ui.workflow.task.roles=Aufgabe Rollen
cms.ui.workflow.task.state=Aufgaben Status
cms.ui.workflow.task.type=Aufgaben Typ
cms.ui.workflow.task.unlock=Aufgabe freigeben
cms.ui.workflow.task.user.add=Benutzer zuordnen
cms.ui.workflow.task.user.delete=Benutzer entlassen
cms.ui.workflow.task.user.none=Dieser Aufgabe sind keine Benutzer zugeordnet
cms.ui.workflow.task.users=Zugeordnete Benutzer
cms.ui.workflow.tasks=Aufgaben
cms.ui.workflow.task.view_locked=Reservierte Aufgaben anzeigen
cms.ui.workflow.task.view_unlocked=Freigegebene Aufgaben anzeigen
cms.ui.workflow.task.view_all=Alle Aufgaben anzeigen
cms.ui.workflow.task.item_title=Item Title
cms.ui.workflow.task.locking_user=Reserviert von\:
cms.ui.workflow.unlock_tasks=Alle meine Aufgaben f\u00fcr diesen Typ freigeben
cms.ui.workflow.your_tasks=Zugewiesene Aufgaben
cms.ui.workflow=Arbeitsablauf
cms.ui.workflow_profile_exists_on_selected_folder=Ablaufprofil existiert f\u00fcr den gew\u00e4hlten Ordner
cms.ui.workflows=Arbeitsabl\u00e4ufe
cms.ui.yes=Ja
cms.ui.you_do_not_have_sufficient_privileges_to_access_this_page=Unzureichende Zugriffsrechte f\u00fcr diese Seite.
cms.contenttypes.template.body_text.title=Haupttext\:
cms.contenttypes.template.body_text.description=Haupttext bearbeiten
cms.contenttypes.shared.assign_categories.title=Kategorien zuweisen
cms.contenttypes.shared.assign_categories.description=Kategorien zuweisen
cms.contenttypes.shared.attach_files.title=Dateien zuordnen
cms.contenttypes.shared.attach_files.description=Dateien anh\u00c4ngen
cms.contenttypes.shared.basic_properties.description=Basiseigenschaften editieren
cms.contenttypes.shared.basic_properties.title=Basiseigenschaften
cms.contenttypes.shared.body_text.title=Haupttext
cms.contenttypes.shared.body_text.description=Haupttext editieren
no=Nein
yes=Ja
mime_type_jsp=JSP
mime_type_xsl=XSL
# For all subject and body email text below, the substitutions are as follows:
# {0}: Item title (display name)
# {1}: a numeric value identifying the type of Task that was completed: 1 for authoring, 2 for approval, 3 for publishing
# {2}: The finish-URL for the task (if the operation is "enable"), or the URL of the authoring page for the item
# {3}: The siteName
# {4}: The system administrator email
# {5}: The date of the event
# {6}: The text of the last comment added to the Task
# {7}: The name of the person who added the last comment
# {8}: The start date of the Task
cms.ui.workflow.email.subject.enable="{0}" ist {1,choice,1#kann erstellt werden|2#wartet auf Annahme|3#wartet auf Ver\u00f6ffentlichung}
cms.ui.workflow.email.subject.finish={1,choice,1#Verfassen|2#Annahme|3#Ver\u00f6ffentlichen} von "{0}" ist erfolgt
cms.ui.workflow.email.subject.rollback={1,choice,1#Verfassen|2#Annahme|3#Ver\u00f6ffentlichen} von "{0}" wurde widerrufen
cms.ui.workflow.email.subject.disable={1,choice,1#Verfassen|2#Annahme|3#Ver\u00f6ffentlichen} von "{0}" wurde deaktiviert
cms.ui.workflow.email.body.enable=\
"{0}" is {1,choice,1#ready for authoring|2#waiting for approval|3#waiting for deployment} on {3}. \n\
You can complete this task by opening this link in your web browser:\n\
\n\
{2}\n\
\n\
If you have any questions, please contact the system adminstrator at {4}.\n\
Thank you for using {3}.\n
cms.ui.workflow.email.body.finish=\
{1,choice,1#Authoring|2#Approval|3#Deployment} of "{0}" was completed on {5,date,long} at {5,time,short}.\n\
You can view the item opening this link in your web browser:\n\
\n\
{2}\n\
\n\
If you have any questions, please contact the system adminstrator at {4}.\n\
Thank you for using {3}.\n
cms.ui.workflow.email.body.rollback=\
{1,choice,1#Authoring|2#Approval|3#Deployment} of "{0}" was rolled back on {5,date,long} at {5,time,short}.\n\
The last comment on this workflow, by {7}, was:\n\
\n\
{6}\n\
\n\
You can view the item and perform any necessary actions by opening this link \n\
in your web browser:\n\
\n\
{2}\n\
\n\
If you have any questions, please contact the system adminstrator at {4}.\n\
Thank you for using {3}.\n
cms.ui.workflow.email.body.disable=\
{1,choice,1#Authoring|2#Approval|3#Deployment} of "{0}" was denied on {5,date,long} at {5,time,short}.\n\
The last comment on this workflow, by {7}, was:\n\
\n\
{6}\n\
\n\
You can view the item and perform any necessary actions by opening this link \n\
in your web browser:\n\
\n\
{2}\n\
\n\
If you have any questions, please contact the system adminstrator at {4}.\n\
Thank you for using {3}.\n
# Subject and body for the Unfinished Task emails
cms.ui.workflow.email.subject.unfinished={1,choice,1#Authoring|2#Approval|3#Deployment} of "{0}" is unfinished
cms.ui.workflow.email.body.unfinished=\
"{0}" is {1,choice,1#ready for authoring|2#waiting for approval|3#waiting for deployment} on {3}. \n\
This task has been waiting for action since {8,date,long} at {8,time,short}.\n\
Please complete this task as soon as possible.\n\
You can complete this task by opening this link in your web browser:\n\
\n\
{2}\n\
\n\
If you have any questions, please contact the system adminstrator at {4}.\n\
Thank you for using {3}.\n
cms.contentassets.ui.description=Beschreibung
cms.ui.content_check_alert.subject=Content Check Alert
cms.ui.content_check_alert.body=Dear Author\n\nYou are listed as the Content Owner for the following {0} web page(s). Please check if they need amending or updating in any way:\n\n{1}\nIf you have any amendments or questions please email the appropriate web editor:\n\nsally.editor@aplaws.org (Council & Democracy, Environment, Education)\njohn.editor@aplaws.org (Community & Living, Business, Social Care)\nfrank.editor@aplaws.org (Council & Democracy, Environment, Education)\n\nYou can contact webmanager@aplaws.org with any questions about this email\n
cms.ui.workflow.task.takeover=\u00dcbernahme
cms.ui.item.lifecycle.republish_and_reset=Lebenszyklus erneut etablieren und starten
cms.contenttypes.ui.description_missing=Bitte eine Beschreibung eingeben
cms.ui.category.view_index_item=Index Element anzeigen
cms.ui.category.edit_index_item=Index Element bearbeiten

View File

@ -29,6 +29,7 @@ import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.form.Submit;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.ContentType; import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
@ -62,6 +63,7 @@ final class ContentTypeItemPane extends BaseItemPane {
private final AddElement m_elementAddForm; private final AddElement m_elementAddForm;
private final SectionTemplatesListing m_templates; private final SectionTemplatesListing m_templates;
// private final RelationAttributeSection m_relationAttributes;
ContentTypeItemPane(final ACSObjectSelectionModel model, ContentTypeItemPane(final ACSObjectSelectionModel model,
final ContentTypeRequestLocal type, final ContentTypeRequestLocal type,
@ -114,6 +116,7 @@ final class ContentTypeItemPane extends BaseItemPane {
add(itemForm); add(itemForm);
m_detailPane.add(new SummarySection(editLink, deleteLink)); m_detailPane.add(new SummarySection(editLink, deleteLink));
m_detailPane.add(new RelationAttributeSection());
m_detailPane.add(new TypeSecurityContainer(new ElementSection())); m_detailPane.add(new TypeSecurityContainer(new ElementSection()));
m_detailPane.add(new TemplateSection(templateAddLink)); m_detailPane.add(new TemplateSection(templateAddLink));
@ -192,6 +195,7 @@ final class ContentTypeItemPane extends BaseItemPane {
group.addAction(m_elementAddForm); group.addAction(m_elementAddForm);
} }
@Override
public final boolean isVisible(final PageState state) { public final boolean isVisible(final PageState state) {
return m_model.isSelected(state) && isDynamicType(state) && return m_model.isSelected(state) && isDynamicType(state) &&
!ContentSection.getConfig().getHideUDCTUI(); !ContentSection.getConfig().getHideUDCTUI();
@ -209,11 +213,41 @@ final class ContentTypeItemPane extends BaseItemPane {
group.addAction(new TypeSecurityContainer(templateAddLink)); group.addAction(new TypeSecurityContainer(templateAddLink));
} }
@Override
public final boolean isVisible(final PageState state) { public final boolean isVisible(final PageState state) {
return m_model.isSelected(state) && !isDynamicType(state); return m_model.isSelected(state) && !isDynamicType(state);
} }
} }
private class RelationAttributeSection extends Section {
RelationAttributeSection(/*final ActionLink attributeEditLink*/) {
setHeading(new Label(gz("cms.ui.type.attributes")));
setBody(new RelationAttributeContainer(m_type));
// setBody(new Label("RelationAttributeContainer"));
}
@Override
public final boolean isVisible(final PageState state) {
boolean retVal = false;
ContentType ct = (ContentType) m_type.getContentType(state);
ContentItem ci = null;
try {
Class<? extends ContentItem> clazz = Class.forName(ct.getClassName()).asSubclass(ContentItem.class);
ci = clazz.newInstance();
retVal = clazz.cast(ci).hasRelationAttributes();
ci.delete();
} catch (Exception ex) {
//retVal = false;
}
return retVal;
}
}
@Override
public final void register(final Page page) { public final void register(final Page page) {
super.register(page); super.register(page);
@ -249,7 +283,7 @@ final class ContentTypeItemPane extends BaseItemPane {
* Determine if the current user has access to edit the content type * Determine if the current user has access to edit the content type
* XXX domlay * XXX domlay
*/ */
protected static final boolean userCanEdit(final PageState state) { protected static boolean userCanEdit(final PageState state) {
SecurityManager sm = Utilities.getSecurityManager(state); SecurityManager sm = Utilities.getSecurityManager(state);
return sm.canAccess(state.getRequest(), return sm.canAccess(state.getRequest(),
SecurityManager.CONTENT_TYPE_ADMIN); SecurityManager.CONTENT_TYPE_ADMIN);

View File

@ -52,6 +52,7 @@ class ContentTypePropertyList extends PropertyList {
m_type = type; m_type = type;
} }
@Override
protected final java.util.List properties(final PageState state) { protected final java.util.List properties(final PageState state) {
final java.util.List props = super.properties(state); final java.util.List props = super.properties(state);
final ContentType type = m_type.getContentType(state); final ContentType type = m_type.getContentType(state);

View File

@ -0,0 +1,91 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.ui.type;
import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentType;
import com.arsdigita.toolbox.ui.ComponentMap;
import com.arsdigita.xml.Element;
import java.util.Iterator;
import java.util.StringTokenizer;
/**
*
* @author quasi
*/
class RelationAttributeContainer extends ComponentMap {
private ContentTypeRequestLocal m_type;
private ContentType contentType;
private StringTokenizer relationAttributeList;
// private static final RequestLocal s_components = new RequestLocal() {
// protected final Object initialValue(final PageState state) {
// return new ComponentMap();
// }
// };
public RelationAttributeContainer(ContentTypeRequestLocal type) {
super();
m_type = type;
relationAttributeList = null;
}
@Override
public final boolean isVisible(final PageState state) {
boolean retVal = false;
ContentType ct = (ContentType) m_type.getContentType(state);
ContentItem ci = null;
try {
Class<? extends ContentItem> clazz = Class.forName(ct.getClassName()).asSubclass(ContentItem.class);
ci = clazz.newInstance();
retVal = clazz.cast(ci).hasRelationAttributes();
relationAttributeList = clazz.cast(ci).getRelationAttributes();
ci.delete();
} catch (Exception ex) {
//retVal = false;
}
// Test
while (relationAttributeList.hasMoreElements()) {
String token = relationAttributeList.nextToken();
put(token, new Label(token));
// ActionLink link = new ActionLink(new Label(token));
// link.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// }
// });
}
return retVal;
}
// HACK: Dies sollte geändert werden, aber ich weiß nicht wie. Das ist der einfachste
// Weg, die exception zu verhindern, aber ich bin mir sicher, daß das später zu
// Problemen führen wird.
@Override
public void lock() {
}
public final void generateXML(final PageState state, final Element parent) {
if (isVisible(state)) {
Iterator iter = children();
while (iter.hasNext()) {
((Component) iter.next()).generateXML(state, parent);
}
}
}
}