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

Content Section Configuration

+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\:   +cms.ui.item.end_time=Ende um\:   +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\:   +cms.ui.item.start_time=Anfangszeit\:   +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 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=unbekannt +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.=  +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 diff --git a/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypeItemPane.java b/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypeItemPane.java index 5ff91531a..c568e8770 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypeItemPane.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypeItemPane.java @@ -29,6 +29,7 @@ import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.Submit; import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentType; import com.arsdigita.cms.SecurityManager; @@ -62,6 +63,7 @@ final class ContentTypeItemPane extends BaseItemPane { private final AddElement m_elementAddForm; private final SectionTemplatesListing m_templates; +// private final RelationAttributeSection m_relationAttributes; ContentTypeItemPane(final ACSObjectSelectionModel model, final ContentTypeRequestLocal type, @@ -114,6 +116,7 @@ final class ContentTypeItemPane extends BaseItemPane { add(itemForm); m_detailPane.add(new SummarySection(editLink, deleteLink)); + m_detailPane.add(new RelationAttributeSection()); m_detailPane.add(new TypeSecurityContainer(new ElementSection())); m_detailPane.add(new TemplateSection(templateAddLink)); @@ -192,6 +195,7 @@ final class ContentTypeItemPane extends BaseItemPane { group.addAction(m_elementAddForm); } + @Override public final boolean isVisible(final PageState state) { return m_model.isSelected(state) && isDynamicType(state) && !ContentSection.getConfig().getHideUDCTUI(); @@ -209,11 +213,41 @@ final class ContentTypeItemPane extends BaseItemPane { group.addAction(new TypeSecurityContainer(templateAddLink)); } + @Override public final boolean isVisible(final PageState 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 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) { super.register(page); @@ -249,7 +283,7 @@ final class ContentTypeItemPane extends BaseItemPane { * Determine if the current user has access to edit the content type * XXX domlay */ - protected static final boolean userCanEdit(final PageState state) { + protected static boolean userCanEdit(final PageState state) { SecurityManager sm = Utilities.getSecurityManager(state); return sm.canAccess(state.getRequest(), SecurityManager.CONTENT_TYPE_ADMIN); diff --git a/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypePropertyList.java b/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypePropertyList.java index 54052111b..13f3ba453 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypePropertyList.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/type/ContentTypePropertyList.java @@ -52,6 +52,7 @@ class ContentTypePropertyList extends PropertyList { m_type = type; } + @Override protected final java.util.List properties(final PageState state) { final java.util.List props = super.properties(state); final ContentType type = m_type.getContentType(state); diff --git a/ccm-cms/src/com/arsdigita/cms/ui/type/RelationAttributeContainer.java b/ccm-cms/src/com/arsdigita/cms/ui/type/RelationAttributeContainer.java new file mode 100644 index 000000000..32b2f221c --- /dev/null +++ b/ccm-cms/src/com/arsdigita/cms/ui/type/RelationAttributeContainer.java @@ -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 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); + } + } + } +}