diff --git a/ccm-cms/src/main/java/org/librecms/attachments/AttachmentManager.java b/ccm-cms/src/main/java/org/librecms/attachments/AttachmentManager.java
new file mode 100644
index 000000000..771bff4bc
--- /dev/null
+++ b/ccm-cms/src/main/java/org/librecms/attachments/AttachmentManager.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2016 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package org.librecms.attachments;
+
+import org.librecms.assets.Asset;
+import org.librecms.contentsection.ContentItem;
+
+import java.util.List;
+
+import javax.enterprise.context.RequestScoped;
+
+/**
+ * Provides methods for managing the assets attached to an item.
+ *
+ * @author Jens Pelzetter
+ */
+@RequestScoped
+public class AttachmentManager {
+
+ /**
+ * Retrieves the names of all {@link AttachmentList}s of an
+ * {@link ContentItem}.
+ *
+ * @param item The item from the which the names are retrieved.
+ *
+ * @return A list containing the names all the attachment lists of the item,
+ * in the order of the attachment lists.
+ */
+ public List getAttachmentListNames(final ContentItem item) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Retrieves all {@link AttachmentList}s of a {@link ContentItem} with a
+ * specific name.
+ *
+ * @param item The item from which the lists are retrieved.
+ * @param name The name of the lists to retrieve.
+ *
+ * @return A list of the attachment list with the specified name. If no
+ * attachment list of the {@code item} does match the provided
+ * {@code name} an empty list is returned.
+ */
+ public List getAttachmentList(
+ final ContentItem item,
+ final String name) {
+
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Adds a new {@link AttachmentList} to an {@link ContentItem}. The list is
+ * put after the existing attachment lists.
+ *
+ * @param item The item to which the list is added.
+ * @param name The name of the new attachment list.
+ *
+ * @return The new attachment list.
+ */
+ public AttachmentList createAttachmentList(final ContentItem item,
+ final String name) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Adds a new {@link AttachmentList} an {@link ContentItem}. The list is put
+ * after the specified position.
+ *
+ * @param item The item to which the list is added.
+ * @param name The name of the new attachment list.
+ * @param after The position after which the new attachment list is added.
+ * If the provided value is larger than the number of existing
+ * attachment lists the list is added after the last one.
+ *
+ * @return The new attachment list.
+ */
+ public AttachmentList createAttachmentList(final ContentItem item,
+ final String name,
+ final long after) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Removes an {@link AttachentList} from an item. All non shared assets
+ * assigned to the {@code attachmentList} are deleted.
+ *
+ * @param item The item from the attachment list is removed.
+ * @param attachmentList The attachment list to remove.
+ */
+ public void removeAttachmentList(final ContentItem item,
+ final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves an attachment list one position up.
+ *
+ * @param attachmentList The list to move.
+ */
+ public void moveUp(final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves an attachment list one position down.
+ *
+ * @param attachmentList The list to move.
+ */
+ public void moveDown(final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves an attachment list to a specific position. The attachment list with
+ * the provided index is moved one position down. If the position is larger
+ * than the number of attachment lists the list is moved to the last
+ * position.
+ *
+ * @param attachmentList The list to move.
+ * @param position The position to which the list is moved.
+ */
+ public void moveTo(final AttachmentList attachmentList,
+ final long position) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Adds the provided {@link Asset} to the provided {@link AttachmentList}.
+ *
+ * @param asset The {@link Asset} to add.
+ * @param attachmentList The attachment list to which the asset is added.
+ */
+ public void attachAsset(final Asset asset,
+ final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Removes the provided {@link Asset} from the provided
+ * {@link AttachmentList}. If the asset is a non shared asset the asset is
+ * deleted.
+ *
+ * @param asset The {@link Asset} to remove.
+ * @param attachmentList The attachment list to which the asset is removed
+ * from.
+ */
+ public void unattachAsset(final Asset asset,
+ final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves the {@link Asset} one position up in the provided
+ * {@link AttachmentList}.
+ *
+ * @param asset The asset to move up. If the asset is not part of
+ * the provided {@link AttachmentList} an
+ * {@link IllegalArgumentException} is thrown.
+ * @param attachmentList The attachment list in which the item is moved.
+ */
+ public void moveUp(final Asset asset,
+ final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves the {@link Asset} one position down in the provided
+ * {@link AttachmentList}.
+ *
+ * @param asset The asset to move down. If the asset is not part of
+ * the provided {@link AttachmentList} an
+ * {@link IllegalArgumentException} is thrown.
+ * @param attachmentList The attachment list in which the item is moved.
+ */
+ public void moveDown(final Asset asset,
+ final AttachmentList attachmentList) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+ /**
+ * Moves the {@link Asset} to the specified position in the provided
+ * {@link AttachmentList}.
+ *
+ * @param asset The asset to move. If the asset is not part of the
+ * provided {@link AttachmentList} an
+ * {@link IllegalArgumentException} is thrown.
+ * @param attachmentList The attachment list in which the item is moved.
+ * @param position The position to which the asset is moved. The asset
+ * occupying the provided index is moved down. If the
+ * provided position is larger than the size of the
+ * attachment list the item is moved to the end of the
+ * list.
+ */
+ public void moveTo(final Asset asset,
+ final AttachmentList attachmentList,
+ final long position) {
+ throw new UnsupportedOperationException("Not implemented yet");
+ }
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java
index 70cf86a1d..ea6b7dac8 100644
--- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java
+++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionManager.java
@@ -617,8 +617,8 @@ public class ContentSectionManager {
if (typeRepo.isContentTypeInUse(contentType.get())) {
throw new IllegalArgumentException(String.format(
- "ContentType %d:\"%s\" is used by content section %d:\"s\" can can't"
- + "be deleted.",
+ "ContentType %d:\"%s\" is used by content section %d:\"%s\" and "
+ + "can't be deleted.",
contentType.get().getObjectId(),
contentType.get().getDisplayName(),
section.getObjectId(),