diff --git a/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml b/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml
index 47ce2c010..7d5188738 100644
--- a/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml
+++ b/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml
@@ -22,7 +22,10 @@
-->
-
+
+
+
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java
index b2dee5fa1..a7177cc5c 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java
@@ -26,6 +26,7 @@ import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator;
import com.arsdigita.bebop.SimpleContainer;
+import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.Text;
import com.arsdigita.bebop.event.TableActionAdapter;
@@ -64,31 +65,31 @@ public class AssetFolderBrowser extends Table {
protected final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
protected final static String SORT_KEY_CREATION_DATE = "creationDate";
- private final FolderSelectionModel folderSelectionModel;
+ private final AssetPane assetPane;
private TableActionListener folderChanger;
private TableActionListener folderDeleter;
private TableColumn nameColumn;
private TableColumn deleteColumn;
private final StringParameter sortTypeParameter = new StringParameter(
- "sortType");
+ "sortType");
private final StringParameter sortDirectionParameter = new StringParameter(
- "sortDir");
+ "sortDir");
private Paginator paginator;
private long folderSize;
- public AssetFolderBrowser(final FolderSelectionModel folderSelectionModel) {
+ public AssetFolderBrowser(final AssetPane assetPane) {
super();
sortTypeParameter.setDefaultValue(SORT_KEY_NAME);
sortDirectionParameter.setDefaultValue(SORT_ACTION_UP);
- this.folderSelectionModel = folderSelectionModel;
+ this.assetPane = assetPane;
initComponents();
}
private void initComponents() {
-
+
setModelBuilder(new AssetFolderBrowserTableModelBuilder());
final GlobalizedMessage[] headers = {
@@ -105,24 +106,23 @@ public class AssetFolderBrowser extends Table {
setClassAttr("dataTable");
getHeader().setDefaultRenderer(
- new com.arsdigita.cms.ui.util.DefaultTableCellRenderer());
+ new com.arsdigita.cms.ui.util.DefaultTableCellRenderer());
nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME);
nameColumn.setCellRenderer(new NameCellRenderer());
nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
-
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
- .setHeaderRenderer(
- new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
+ .setHeaderRenderer(
+ new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
- .setCellRenderer(new DateCellRenderer());
+ .setCellRenderer(new DateCellRenderer());
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
- .setHeaderRenderer(new HeaderCellRenderer(
- SORT_KEY_LAST_MODIFIED_DATE));
+ .setHeaderRenderer(new HeaderCellRenderer(
+ SORT_KEY_LAST_MODIFIED_DATE));
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
- .setCellRenderer(new DateCellRenderer());
+ .setCellRenderer(new DateCellRenderer());
deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE);
deleteColumn.setCellRenderer(new ActionCellRenderer());
@@ -142,14 +142,19 @@ public class AssetFolderBrowser extends Table {
super.register(page);
- page.addComponentStateParam(this, folderSelectionModel.
- getStateParameter());
+ page.addComponentStateParam(
+ this,
+ getFolderSelectionModel().getStateParameter());
page.addComponentStateParam(this, sortTypeParameter);
page.addComponentStateParam(this, sortDirectionParameter);
}
protected FolderSelectionModel getFolderSelectionModel() {
- return folderSelectionModel;
+ return assetPane.getFolderSelectionModel();
+ }
+
+ protected SingleSelectionModel getSelectedAssetModel() {
+ return assetPane.getSelectedAssetModel();
}
protected Paginator getPaginator() {
@@ -200,7 +205,7 @@ public class AssetFolderBrowser extends Table {
final String sortKey = (String) state.getValue(sortTypeParameter);
final boolean isCurrentKey = sortKey.equals(key);
final String currentSortDirection = (String) state
- .getValue(sortDirectionParameter);
+ .getValue(sortDirectionParameter);
final String imageUrlStub;
if (SORT_ACTION_UP.equals(currentSortDirection)) {
@@ -217,7 +222,7 @@ public class AssetFolderBrowser extends Table {
// by default, everything sorts "up" unless it
// is the current key and it is already pointing up
if (SORT_ACTION_UP.equals(currentSortDirection)
- && isCurrentKey) {
+ && isCurrentKey) {
sortDirectionAction = SORT_ACTION_DOWN;
} else {
sortDirectionAction = SORT_ACTION_UP;
@@ -268,14 +273,14 @@ public class AssetFolderBrowser extends Table {
final String name = (String) value;
final ContentSection section = CMS.getContext().
- getContentSection();
+ getContentSection();
final ContentSectionManager sectionManager = CdiUtil.
- createCdiUtil()
- .findBean(ContentSectionManager.class);
+ createCdiUtil()
+ .findBean(ContentSectionManager.class);
final boolean isFolder = ((AssetFolderBrowserTableModel) table
.getTableModel(state))
- .isFolder();
+ .isFolder();
final long objectId = getObjectId(key);
if (isFolder) {
@@ -288,13 +293,14 @@ public class AssetFolderBrowser extends Table {
row,
column);
} else {
+ return new ControlLink(new Text(name));
+
// return new Link(new Text(name),
// itemResolver.generateItemURL(state,
// objectId,
// name,
// section,
// "DRAFT"));
- return new Text(name);
}
}
@@ -339,13 +345,13 @@ public class AssetFolderBrowser extends Table {
return new Label(" ", false);
} else {
final ControlLink link = new ControlLink(
- new Label(
- new GlobalizedMessage("cms.ui.folder.delete",
- CmsConstants.CMS_FOLDER_BUNDLE)));
+ new Label(
+ new GlobalizedMessage("cms.ui.folder.delete",
+ CmsConstants.CMS_FOLDER_BUNDLE)));
link.setConfirmation(
- new GlobalizedMessage(
- "cms.ui.folder.delete_confirmation_assets",
- CmsConstants.CMS_FOLDER_BUNDLE));
+ new GlobalizedMessage(
+ "cms.ui.folder.delete_confirmation_assets",
+ CmsConstants.CMS_FOLDER_BUNDLE));
return link;
}
}
@@ -367,7 +373,7 @@ public class AssetFolderBrowser extends Table {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean(
- AssetFolderBrowserController.class);
+ AssetFolderBrowserController.class);
controller.deleteObject((String) event.getRowKey());
((Table) event.getSource()).clearSelection(state);
@@ -387,9 +393,16 @@ public class AssetFolderBrowser extends Table {
}
clearSelection(state);
- getFolderSelectionModel().setSelectedKey(
- state,
- getObjectId(event.getRowKey()));
+ final String rowKey = (String) event.getRowKey();
+ if (rowKey.startsWith(CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
+ getFolderSelectionModel().setSelectedKey(state,
+ getObjectId(rowKey));
+ } else if (rowKey.startsWith(
+ CmsConstants.FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
+ getSelectedAssetModel().setSelectedKey(state,
+ getObjectId(rowKey));
+ assetPane.editAssetMode(state);
+ }
}
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserController.java
index 3e9490db2..f7cea3a99 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserController.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserController.java
@@ -58,6 +58,8 @@ import org.librecms.contentsection.FolderRepository;
import java.util.Collections;
import java.util.Optional;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import static org.librecms.CmsConstants.*;
@@ -68,6 +70,9 @@ import static org.librecms.CmsConstants.*;
@RequestScoped
public class AssetFolderBrowserController {
+ private static final Logger LOGGER = LogManager
+ .getLogger(AssetFolderBrowserController.class);
+
@Inject
private EntityManager entityManager;
@@ -106,7 +111,7 @@ public class AssetFolderBrowserController {
@PostConstruct
private void init() {
final KernelConfig kernelConfig = confManager.findConfiguration(
- KernelConfig.class);
+ KernelConfig.class);
defaultLocale = kernelConfig.getDefaultLocale();
}
@@ -123,9 +128,9 @@ public class AssetFolderBrowserController {
firstResult,
maxResults);
final List subFolderRows = subFolders
- .stream()
- .map(subFolder -> buildRow(subFolder))
- .collect(Collectors.toList());
+ .stream()
+ .map(subFolder -> buildRow(subFolder))
+ .collect(Collectors.toList());
if (subFolders.size() > maxResults) {
return subFolderRows;
@@ -140,9 +145,9 @@ public class AssetFolderBrowserController {
firstAsset,
maxAssets);
final List assetRows = assets
- .stream()
- .map(asset -> buildRow(asset))
- .collect(Collectors.toList());
+ .stream()
+ .map(asset -> buildRow(asset))
+ .collect(Collectors.toList());
final List rows = new ArrayList<>();
rows.addAll(subFolderRows);
@@ -172,19 +177,19 @@ public class AssetFolderBrowserController {
criteriaQuery = criteriaQuery.select(builder.count(from));
final List subFolders = findSubFolders(
- folder,
- filterTerm,
- AssetFolderBrowser.SORT_KEY_NAME,
- AssetFolderBrowser.SORT_ACTION_UP,
- -1,
- -1);
+ folder,
+ filterTerm,
+ AssetFolderBrowser.SORT_KEY_NAME,
+ AssetFolderBrowser.SORT_ACTION_UP,
+ -1,
+ -1);
final List assets = findAssetsInFolder(
- folder,
- filterTerm,
- AssetFolderBrowser.SORT_KEY_NAME,
- AssetFolderBrowser.SORT_ACTION_UP,
- -1,
- -1);
+ folder,
+ filterTerm,
+ AssetFolderBrowser.SORT_KEY_NAME,
+ AssetFolderBrowser.SORT_ACTION_UP,
+ -1,
+ -1);
if (subFolders.isEmpty() && assets.isEmpty()) {
return 0;
@@ -194,8 +199,8 @@ public class AssetFolderBrowserController {
criteriaQuery = criteriaQuery.where(from.in(subFolders));
} else {
criteriaQuery = criteriaQuery.where(builder.or(
- from.in(subFolders),
- from.in(assets)));
+ from.in(subFolders),
+ from.in(assets)));
}
return entityManager.createQuery(criteriaQuery).getSingleResult();
@@ -213,17 +218,17 @@ public class AssetFolderBrowserController {
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
copyFolder(targetFolder,
Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
copyAsset(targetFolder,
Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_ITEM.length())));
+ FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
} else {
throw new IllegalArgumentException(String.format(
- "ID '%s' does not start with '%s' or '%s'.",
- objectId,
- FOLDER_BROWSER_KEY_PREFIX_FOLDER,
- FOLDER_BROWSER_KEY_PREFIX_ASSET));
+ "ID '%s' does not start with '%s' or '%s'.",
+ objectId,
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER,
+ FOLDER_BROWSER_KEY_PREFIX_ASSET));
}
}
@@ -235,10 +240,10 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(targetFolder);
final Folder folder = folderRepo.findById(folderId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No folder with ID %d in the database. "
- + "Where did that ID come from?",
- folderId)));
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No folder with ID %d in the database. "
+ + "Where did that ID come from?",
+ folderId)));
folderManager.copyFolder(folder, targetFolder);
@@ -250,10 +255,10 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(targetFolder);
final Asset asset = assetRepo
- .findById(assetId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No asset ith ID %d in the database. Where did that ID come from?",
- assetId)));
+ .findById(assetId)
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No asset ith ID %d in the database. Where did that ID come from?",
+ assetId)));
assetManager.copy(asset, targetFolder);
}
@@ -269,17 +274,17 @@ public class AssetFolderBrowserController {
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
moveFolder(targetFolder,
Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())));
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
moveAsset(targetFolder,
Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
+ FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
} else {
throw new IllegalArgumentException(String.format(
- "ID '%s' does not start with '%s' or '%s'.",
- objectId,
- FOLDER_BROWSER_KEY_PREFIX_FOLDER,
- FOLDER_BROWSER_KEY_PREFIX_ASSET));
+ "ID '%s' does not start with '%s' or '%s'.",
+ objectId,
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER,
+ FOLDER_BROWSER_KEY_PREFIX_ASSET));
}
}
}
@@ -289,10 +294,10 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(targetFolder);
final Folder folder = folderRepo.findById(folderId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No folder with ID %d in the database. "
- + "Where did that ID come from?",
- folderId)));
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No folder with ID %d in the database. "
+ + "Where did that ID come from?",
+ folderId)));
folderManager.moveFolder(folder, targetFolder);
}
@@ -302,10 +307,10 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(targetFolder);
final Asset asset = assetRepo
- .findById(assetId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No asset with ID %d in the database. Where did that ID come from?",
- assetId)));
+ .findById(assetId)
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No asset with ID %d in the database. Where did that ID come from?",
+ assetId)));
assetManager.move(asset, targetFolder);
}
@@ -316,20 +321,20 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(sources);
final List sourceFolderIds = sources
- .stream()
- .filter(source -> source.startsWith(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER))
- .collect(Collectors.toList());
+ .stream()
+ .filter(source -> source.startsWith(
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER))
+ .collect(Collectors.toList());
final List parentFolderIds = sourceFolderIds
- .stream()
- .map(sourceFolderId -> findParentFolderId(sourceFolderId))
- .filter(Optional::isPresent)
- .map(Optional::get)
- .collect(Collectors.toList());
+ .stream()
+ .map(sourceFolderId -> findParentFolderId(sourceFolderId))
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .collect(Collectors.toList());
final List> subFolderIds = sourceFolderIds
- .stream()
- .map(sourceFolderId -> findSubFolderIds(sourceFolderId))
- .collect(Collectors.toList());
+ .stream()
+ .map(sourceFolderId -> findSubFolderIds(sourceFolderId))
+ .collect(Collectors.toList());
final List invalidTargetIds = new ArrayList<>();
invalidTargetIds.addAll(sourceFolderIds);
@@ -348,26 +353,26 @@ public class AssetFolderBrowserController {
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
throw new IllegalArgumentException(String.format(
- "Provided string '%s' is not an ID of a folder.",
- folderId));
+ "Provided string '%s' is not an ID of a folder.",
+ folderId));
}
final long objectId = Long.parseLong(folderId.substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
final Folder folder = folderRepo.findById(objectId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No folder with ID %d found in database. "
- + "Where did that ID come form?",
- objectId)));
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No folder with ID %d found in database. "
+ + "Where did that ID come form?",
+ objectId)));
final Optional parentFolder = folderManager.getParentFolder(
- folder);
+ folder);
if (parentFolder.isPresent()) {
return Optional.empty();
} else {
return Optional.ofNullable(String.format(
- "%s%d",
- FOLDER_BROWSER_KEY_PREFIX_FOLDER,
- parentFolder.get().getObjectId()));
+ "%s%d",
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER,
+ parentFolder.get().getObjectId()));
}
}
@@ -377,23 +382,23 @@ public class AssetFolderBrowserController {
if (!folderId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
throw new IllegalArgumentException(String.format(
- "Provided string '%s' is not the ID of a folder.",
- folderId));
+ "Provided string '%s' is not the ID of a folder.",
+ folderId));
}
final long objectId = Long.parseLong(folderId.substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
final Folder folder = folderRepo.findById(objectId)
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No folder with ID %d found in database. "
- + "Where did that ID come form?",
- objectId)));
+ .orElseThrow(() -> new IllegalArgumentException(String.format(
+ "No folder with ID %d found in database. "
+ + "Where did that ID come form?",
+ objectId)));
return findSubFolders(folder)
- .stream()
- .map(subFolder -> String.format("%s%d",
- FOLDER_BROWSER_KEY_PREFIX_FOLDER,
- subFolder.getObjectId()))
- .collect(Collectors.toList());
+ .stream()
+ .map(subFolder -> String.format("%s%d",
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER,
+ subFolder.getObjectId()))
+ .collect(Collectors.toList());
}
private List findSubFolders(final Folder folder) {
@@ -401,7 +406,7 @@ public class AssetFolderBrowserController {
Objects.requireNonNull(folder);
if (folder.getSubFolders() == null
- || folder.getSubFolders().isEmpty()) {
+ || folder.getSubFolders().isEmpty()) {
return Collections.emptyList();
}
@@ -426,21 +431,21 @@ public class AssetFolderBrowserController {
if (objectId.startsWith("folder-")) {
final long folderId = Long.parseLong(
- objectId.substring("folder-".length()));
+ objectId.substring("folder-".length()));
folderRepo
- .findById(folderId)
- .ifPresent(folderRepo::delete);
+ .findById(folderId)
+ .ifPresent(folderRepo::delete);
} else if (objectId.startsWith("asset-")) {
final long assetId = Long.parseLong(
- objectId.substring("asset-".length()));
+ objectId.substring("asset-".length()));
assetRepo
- .findById(assetId)
- .ifPresent(assetRepo::delete);
+ .findById(assetId)
+ .ifPresent(assetRepo::delete);
} else {
throw new IllegalArgumentException(
- "The objectId is expected to start with 'folder-' or 'item.'.");
+ "The objectId is expected to start with 'folder-' or 'asset-'.");
}
}
@@ -452,15 +457,15 @@ public class AssetFolderBrowserController {
row.setObjectUuid(folder.getUuid());
row.setName(folder.getName());
if (folder.getTitle().hasValue(globalizationHelper
- .getNegotiatedLocale())) {
+ .getNegotiatedLocale())) {
row.setTitle(folder.getTitle().getValue(globalizationHelper
- .getNegotiatedLocale()));
+ .getNegotiatedLocale()));
} else {
row.setTitle(folder.getTitle().getValue(defaultLocale));
}
row.setFolder(true);
row.setDeletable(!categoryManager.hasSubCategories(folder)
- && !categoryManager.hasObjects(folder));
+ && !categoryManager.hasObjects(folder));
return row;
}
@@ -473,14 +478,14 @@ public class AssetFolderBrowserController {
row.setObjectUuid(asset.getUuid());
row.setName(asset.getDisplayName());
if (asset.getTitle().hasValue(globalizationHelper
- .getNegotiatedLocale())) {
+ .getNegotiatedLocale())) {
row.setTitle(asset.getTitle().getValue(globalizationHelper
- .getNegotiatedLocale()));
+ .getNegotiatedLocale()));
} else {
row.setTitle(asset.getTitle().getValue(defaultLocale));
}
final AssetTypeInfo typeInfo = typesManager
- .getAssetTypeInfo(asset.getClass());
+ .getAssetTypeInfo(asset.getClass());
row.setTypeLabelBundle(typeInfo.getLabelBundle());
row.setTypeLabelKey(typeInfo.getLabelKey());
@@ -501,30 +506,32 @@ public class AssetFolderBrowserController {
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery criteria = builder
- .createQuery(Folder.class);
+ .createQuery(Folder.class);
final Root from = criteria.from(Folder.class);
final Order order;
if (AssetFolderBrowser.SORT_KEY_NAME.equals(orderBy)
- && AssetFolderBrowser.SORT_ACTION_DOWN.
- equals(orderDirection)) {
+ && AssetFolderBrowser.SORT_ACTION_DOWN.
+ equals(orderDirection)) {
order = builder.desc(from.get("name"));
} else {
order = builder.asc(from.get("name"));
}
final TypedQuery query = entityManager
- .createQuery(
- criteria.where(
- builder.and(
- builder.equal(from.get("parentCategory"),
- folder),
- builder.like(builder.lower(from.get("name")),
- filterTerm)
- )
- )
- .orderBy(order)
- );
+ .createQuery(
+ criteria.where(
+ builder.and(
+ builder.
+ equal(from.get("parentCategory"),
+ folder),
+ builder.like(builder.lower(from.get(
+ "name")),
+ filterTerm)
+ )
+ )
+ .orderBy(order)
+ );
if (firstResult >= 0) {
query.setFirstResult(firstResult);
@@ -573,22 +580,37 @@ public class AssetFolderBrowserController {
order = builder.asc(orderPath);
}
+ LOGGER.debug("The database contains {} assets.",
+ entityManager.createQuery(criteria.select(fromAsset)
+ .where(
+ builder.and(
+ builder.equal(join.get("category"),
+ folder),
+ builder.equal(join.get("type"),
+ CmsConstants.CATEGORIZATION_TYPE_FOLDER),
+ builder.like(builder.lower(
+ fromAsset.get(
+ "displayName")),
+ filterTerm)
+ ))).getResultList().size());
+
final TypedQuery query = entityManager
- .createQuery(
- criteria.select(fromAsset)
- .where(
- builder.and(
- builder.equal(join.get(
- "category"), folder),
- builder.equal(join.get("type"),
- CmsConstants.CATEGORIZATION_TYPE_FOLDER),
- builder.like(builder.lower(fromAsset.get(
- "displayName")),
- filterTerm)
- )
- )
- .orderBy(order)
- );
+ .createQuery(
+ criteria.select(fromAsset)
+ .where(
+ builder.and(
+ builder.equal(join.get(
+ "category"), folder),
+ builder.equal(join.get("type"),
+ CmsConstants.CATEGORIZATION_TYPE_FOLDER),
+ builder.like(builder.lower(
+ fromAsset.get(
+ "displayName")),
+ filterTerm)
+ )
+ )
+ .orderBy(order)
+ );
if (firstResult >= 0) {
query.setFirstResult(firstResult);
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModel.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModel.java
index 0d08f47ad..dbef141e4 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModel.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModel.java
@@ -96,7 +96,7 @@ class AssetFolderBrowserTableModel implements TableModel {
if (currentRow.isFolder()) {
return String.format("folder-%d", currentRow.getObjectId());
} else {
- return String.format("item-%d", currentRow.getObjectId());
+ return String.format("asset-%d", currentRow.getObjectId());
}
// return currentRow.getObjectId();
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModelBuilder.java
index c747c7a5f..afbf71efd 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModelBuilder.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowserTableModelBuilder.java
@@ -39,25 +39,25 @@ import java.util.List;
* @author Jens Pelzetter
*/
class AssetFolderBrowserTableModelBuilder
- extends LockableImpl
- implements TableModelBuilder {
+ extends LockableImpl
+ implements TableModelBuilder {
private static final Logger LOGGER = LogManager
- .getLogger(AssetFolderBrowserTableModelBuilder.class);
+ .getLogger(AssetFolderBrowserTableModelBuilder.class);
@Override
public TableModel makeModel(final Table table,
final PageState state) {
if (!(table instanceof AssetFolderBrowser)) {
- throw new IllegalArgumentException("The "
- + "AssetFolderBrowserTableModelBuilder can only be used for the "
- + "AssetFolderBrowser.");
+ throw new IllegalArgumentException(
+ "The AssetFolderBrowserTableModelBuilder can only be used "
+ + "for the AssetFolderBrowser.");
}
final AssetFolderBrowser assetFolderBrowser = (AssetFolderBrowser) table;
final FolderSelectionModel folderSelectionModel = assetFolderBrowser
- .getFolderSelectionModel();
+ .getFolderSelectionModel();
final Folder folder = folderSelectionModel.getSelectedObject(state);
if (folder == null) {
return Table.EMPTY_MODEL;
@@ -66,7 +66,7 @@ class AssetFolderBrowserTableModelBuilder
final Paginator paginator = assetFolderBrowser.getPaginator();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil
- .findBean(AssetFolderBrowserController.class);
+ .findBean(AssetFolderBrowserController.class);
final String orderBy;
if (assetFolderBrowser.getSortType(state) == null) {
orderBy = AssetFolderBrowser.SORT_KEY_NAME;
@@ -85,12 +85,12 @@ class AssetFolderBrowserTableModelBuilder
final long start = System.nanoTime();
LOGGER.debug("Retrieving table rows...");
final List rows = controller
- .getAssetRows(folder,
- orderBy,
- orderDirection,
- first - 1,
- pageSize);
-
+ .getAssetRows(folder,
+ orderBy,
+ orderDirection,
+ first - 1,
+ pageSize);
+
LOGGER.debug("Retrieve table rows in {} ms.",
(System.nanoTime() - start) / 1000);
return new AssetFolderBrowserTableModel(rows);
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java
index 3f1988266..2fa891ea1 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java
@@ -39,6 +39,9 @@ import org.librecms.contentsection.Asset;
import org.librecms.contentsection.AssetRepository;
import java.util.Optional;
+import org.libreccm.categorization.CategoryManager;
+import org.librecms.contentsection.Folder;
+import org.librecms.contentsection.FolderManager;
/**
*
@@ -75,6 +78,10 @@ public abstract class AssetForm extends Form implements FormInitListener,
saveCancelSection = new SaveCancelSection();
add(saveCancelSection);
+
+ addInitListener(this);
+ addProcessListener(this);
+ addSubmissionListener(this);
}
protected void addWidgets() {
@@ -92,12 +99,13 @@ public abstract class AssetForm extends Form implements FormInitListener,
} else {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetRepository assetRepo = cdiUtil.findBean(
- AssetRepository.class);
+ AssetRepository.class);
final Asset asset = assetRepo
- .findById(selectionModel.getSelectedKey(state))
- .orElseThrow(() -> new IllegalArgumentException(String.format(
- "No asset with ID %d in the database.",
- selectionModel.getSelectedKey(state))));
+ .findById(selectionModel.getSelectedKey(state))
+ .orElseThrow(() -> new IllegalArgumentException(String.
+ format(
+ "No asset with ID %d in the database.",
+ selectionModel.getSelectedKey(state))));
return Optional.of(asset);
}
}
@@ -112,18 +120,18 @@ public abstract class AssetForm extends Form implements FormInitListener,
if (selectedAsset.isPresent()) {
title.setValue(state,
selectedAsset
- .get()
- .getTitle()
- .getValue(KernelConfig
- .getConfig()
- .getDefaultLocale()));
+ .get()
+ .getTitle()
+ .getValue(KernelConfig
+ .getConfig()
+ .getDefaultLocale()));
}
}
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
@@ -138,26 +146,45 @@ public abstract class AssetForm extends Form implements FormInitListener,
}
asset.getTitle().addValue(
- KernelConfig.getConfig().getDefaultLocale(),
- (String) title.getValue(state));
+ KernelConfig.getConfig().getDefaultLocale(),
+ (String) title.getValue(state));
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetRepository assetRepo = cdiUtil
- .findBean(AssetRepository.class);
+ .findBean(AssetRepository.class);
assetRepo.save(asset);
+
+ if (!selectedAsset.isPresent()) {
+ //Set display name
+ asset.setDisplayName((String) title.getValue(state));
+ assetRepo.save(asset);
+
+ //Add new asset to currently selected folder
+ final Folder selectedFolder = assetPane
+ .getFolderSelectionModel()
+ .getSelectedObject(state);
+ final CategoryManager categoryManager = cdiUtil
+ .findBean(CategoryManager.class);
+ categoryManager.addObjectToCategory(
+ asset,
+ selectedFolder,
+ CmsConstants.CATEGORIZATION_TYPE_FOLDER);
+ }
+
+ assetPane.browseMode(state);
}
}
protected abstract Asset createAsset(final PageState state)
- throws FormProcessException;
+ throws FormProcessException;
protected abstract void updateAsset(final Asset asset,
- final PageState state)
- throws FormProcessException;
+ final PageState state)
+ throws FormProcessException;
@Override
public void submitted(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java
index 748e68727..6c2c6acba 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java
@@ -26,6 +26,7 @@ import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.MetaForm;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator;
@@ -69,6 +70,7 @@ import com.arsdigita.cms.ui.folder.FolderTreeModelController;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.LayoutPanel;
+import java.lang.reflect.InvocationTargetException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -98,6 +100,7 @@ import java.util.Arrays;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.TooManyListenersException;
+import java.util.logging.Level;
import static org.librecms.CmsConstants.*;
@@ -121,9 +124,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
private final FolderRequestLocal folderRequestLocal;
private final SingleSelectionModel selectedAssetModel;
private final ArrayParameter sourcesParameter = new ArrayParameter(
- new StringParameter(SOURCES_PARAM));
+ new StringParameter(SOURCES_PARAM));
private final StringParameter actionParameter = new StringParameter(
- ACTION_PARAM);
+ ACTION_PARAM);
+ private final StringParameter selectedAssetTypeParam = new StringParameter(
+ "selected_asset_type");
private AssetFolderBrowser folderBrowser;
private Form browserForm;
@@ -136,7 +141,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
private SegmentedPanel.Segment actionsSegment;
private SegmentedPanel.Segment newFolderSegment;
private SegmentedPanel.Segment editFolderSegment;
- private SegmentedPanel.Segment editAssetSegement;
+ private SegmentedPanel.Segment editAssetSegment;
@SuppressWarnings("unchecked")
public AssetPane() {
@@ -145,8 +150,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
protected Folder getRootFolder(final PageState state) {
final ContentSection section = CMS
- .getContext()
- .getContentSection();
+ .getContext()
+ .getContentSection();
return section.getRootAssetsFolder();
}
@@ -157,8 +162,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
protected Long getRootFolderID(final PageState state) {
final ContentSection section = CMS
- .getContext()
- .getContentSection();
+ .getContext()
+ .getContentSection();
return section.getRootAssetsFolder().getObjectId();
}
@@ -166,14 +171,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
folderRequestLocal = new FolderRequestLocal(folderSelectionModel);
selectedAssetModel = new ParameterSingleSelectionModel<>(
- new LongParameter("selected-asset"));
+ new LongParameter("selected-asset"));
final SegmentedPanel left = new SegmentedPanel();
setLeft(left);
final Label heading = new Label(
- new GlobalizedMessage("cms.ui.folder_browser",
- CmsConstants.CMS_BUNDLE));
+ new GlobalizedMessage("cms.ui.folder_browser",
+ CmsConstants.CMS_BUNDLE));
left.addSegment(heading, tree);
// final Text placeholder = new Text("Placeholder");
@@ -189,17 +194,17 @@ public class AssetPane extends LayoutPanel implements Resettable {
browserForm = new Form("assetFolderBrowser",
new BoxPanel(BoxPanel.VERTICAL));
browserForm.setMethod(Form.GET);
- folderBrowser = new AssetFolderBrowser(folderSelectionModel);
+ folderBrowser = new AssetFolderBrowser(this);
final Paginator paginator = new Paginator(
- new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
- CMSConfig.getConfig().getFolderBrowseListSize());
+ new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
+ CMSConfig.getConfig().getFolderBrowseListSize());
folderBrowser.setPaginator(paginator);
final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter);
browserForm.add(checkboxGroup);
final TableColumn checkboxCol = new TableColumn();
checkboxCol.setHeaderValue(
- new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE));
+ new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE));
checkboxCol.setCellRenderer(new TableCellRenderer() {
@Override
@@ -224,31 +229,31 @@ public class AssetPane extends LayoutPanel implements Resettable {
browserForm.add(folderBrowser);
final SimpleContainer actionFormContainer = new SimpleContainer();
actionFormContainer.add(new Label(
- new GlobalizedMessage(
- "cms.ui.folder.edit_selection",
- CmsConstants.CMS_FOLDER_BUNDLE)));
+ new GlobalizedMessage(
+ "cms.ui.folder.edit_selection",
+ CmsConstants.CMS_FOLDER_BUNDLE)));
actionSelect = new SingleSelect(actionParameter);
actionSelect.addOption(
- new Option(COPY,
- new Label(new GlobalizedMessage(
- "cms.ui.folder.copy.action",
- CmsConstants.CMS_FOLDER_BUNDLE))));
+ new Option(COPY,
+ new Label(new GlobalizedMessage(
+ "cms.ui.folder.copy.action",
+ CmsConstants.CMS_FOLDER_BUNDLE))));
actionSelect.addOption(
- new Option(MOVE,
- new Label(new GlobalizedMessage(
- "cms.ui.folder.move.action",
- CmsConstants.CMS_FOLDER_BUNDLE))));
+ new Option(MOVE,
+ new Label(new GlobalizedMessage(
+ "cms.ui.folder.move.action",
+ CmsConstants.CMS_FOLDER_BUNDLE))));
actionFormContainer.add(actionSelect);
actionSubmit = new Submit(
- "Go",
- new GlobalizedMessage("cms.ui.folder.go",
- CmsConstants.CMS_FOLDER_BUNDLE));
+ "Go",
+ new GlobalizedMessage("cms.ui.folder.go",
+ CmsConstants.CMS_FOLDER_BUNDLE));
actionFormContainer.add(actionSubmit);
browserForm.addProcessListener(new FormProcessListener() {
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
@@ -264,7 +269,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
@@ -285,12 +290,12 @@ public class AssetPane extends LayoutPanel implements Resettable {
});
targetSelector.addValidationListener(
- new TargetSelectorValidationListener());
+ new TargetSelectorValidationListener());
targetSelector.addSubmissionListener(new FormSubmissionListener() {
@Override
public void submitted(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
@@ -298,8 +303,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
reset(state);
browseMode(state);
throw new FormProcessException(new GlobalizedMessage(
- "cms.ui.folder.cancelled",
- CmsConstants.CMS_FOLDER_BUNDLE));
+ "cms.ui.folder.cancelled",
+ CmsConstants.CMS_FOLDER_BUNDLE));
}
}
@@ -321,13 +326,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Label target = (Label) event.getTarget();
final long selectedId = Long.parseLong(selectionModel
- .getSelectedKey(state).toString());
+ .getSelectedKey(state).toString());
final long currentFolderId = folderSelectionModel
- .getSelectedObject(state).getObjectId();
+ .getSelectedObject(state).getObjectId();
target.setLabel(String.format(
- "selectedId = %d; currentFolderId = %d",
- selectedId,
- currentFolderId));
+ "selectedId = %d; currentFolderId = %d",
+ selectedId,
+ currentFolderId));
}
});
@@ -340,19 +345,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.add(actions);
final FolderCreateForm folderCreateForm = new FolderCreateForm(
- "fcreat", folderSelectionModel);
+ "fcreat", folderSelectionModel);
folderCreateForm.addSubmissionListener(new FormSubmissionListener() {
@Override
public void submitted(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
if (event.getSource() == folderCreateForm
- && folderCreateForm.isCancelled(state)) {
+ && folderCreateForm.isCancelled(state)) {
browseMode(state);
throw new FormProcessException(new GlobalizedMessage(
- "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
+ "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
}
}
@@ -362,7 +367,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
final Object source = event.getSource();
@@ -373,24 +378,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
});
newFolderSegment = panel.addSegment(
- new Label(new GlobalizedMessage("cms.ui.new_folder",
- CmsConstants.CMS_BUNDLE)),
- folderCreateForm);
+ new Label(new GlobalizedMessage("cms.ui.new_folder",
+ CmsConstants.CMS_BUNDLE)),
+ folderCreateForm);
final FolderEditorForm folderEditorForm = new FolderEditorForm(
- "fedit", folderSelectionModel);
+ "fedit", folderSelectionModel);
folderEditorForm.addSubmissionListener(new FormSubmissionListener() {
@Override
public void submitted(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
if (event.getSource() == folderEditorForm
- && folderEditorForm.isCancelled(state)) {
+ && folderEditorForm.isCancelled(state)) {
browseMode(state);
throw new FormProcessException(new GlobalizedMessage(
- "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
+ "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
}
}
@@ -399,7 +404,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
final Object source = event.getSource();
@@ -410,13 +415,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
});
editFolderSegment = panel.addSegment(
- new Label(new GlobalizedMessage("cms.ui.edit_folder",
- CmsConstants.CMS_BUNDLE)),
- folderEditorForm);
+ new Label(new GlobalizedMessage("cms.ui.edit_folder",
+ CmsConstants.CMS_BUNDLE)),
+ folderEditorForm);
final ActionLink createFolderAction = new ActionLink(
- new Label(new GlobalizedMessage("cms.ui.new_folder",
- CmsConstants.CMS_BUNDLE)));
+ new Label(new GlobalizedMessage("cms.ui.new_folder",
+ CmsConstants.CMS_BUNDLE)));
createFolderAction.addActionListener(new ActionListener() {
@Override
@@ -432,8 +437,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
actions.addAction(createFolderAction);
final ActionLink editFolderAction = new ActionLink(
- new Label(new GlobalizedMessage("cms.ui.edit_folder",
- CmsConstants.CMS_BUNDLE)));
+ new Label(new GlobalizedMessage("cms.ui.edit_folder",
+ CmsConstants.CMS_BUNDLE)));
editFolderAction.addActionListener(new ActionListener() {
@Override
@@ -451,9 +456,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Form newAssetForm = new Form("new-asset-form",
new BoxPanel(BoxPanel.HORIZONTAL));
newAssetForm.add(new Label(new GlobalizedMessage(
- "cms.ui.assets.new", CmsConstants.CMS_BUNDLE)));
+ "cms.ui.assets.new", CmsConstants.CMS_BUNDLE)));
final SingleSelect newAssetTypeSelect = new SingleSelect(
- "new-asset-type-select");
+ selectedAssetTypeParam);
try {
newAssetTypeSelect.addPrintListener(new PrintListener() {
@@ -461,18 +466,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
public void prepare(final PrintEvent event) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetTypesManager typesManager = cdiUtil
- .findBean(AssetTypesManager.class);
+ .findBean(AssetTypesManager.class);
final SingleSelect target = (SingleSelect) event.getTarget();
+ target.clearOptions();
for (final AssetTypeInfo type : typesManager
- .getAvailableAssetTypes()) {
+ .getAvailableAssetTypes()) {
final String labelKey = type.getLabelKey();
final String labelBundle = type.getLabelBundle();
final ResourceBundle bundle = ResourceBundle
- .getBundle(labelBundle);
+ .getBundle(labelBundle);
final String label = bundle.getString(labelKey);
target.addOption(new Option(
- type.getAssetClass().getName(),
- new Text(label)));
+ type.getAssetClass().getName(),
+ new Text(label)));
}
}
@@ -482,20 +488,94 @@ public class AssetPane extends LayoutPanel implements Resettable {
}
newAssetForm.add(newAssetTypeSelect);
newAssetForm.add(new Submit(new GlobalizedMessage(
- "cms.ui.assets.new.create", CmsConstants.CMS_BUNDLE)));
+ "cms.ui.assets.new.create", CmsConstants.CMS_BUNDLE)));
newAssetForm.addProcessListener(new FormProcessListener() {
@Override
public void process(final FormSectionEvent event)
- throws FormProcessException {
-
- //Nothing yet
+ throws FormProcessException {
+ editAssetMode(event.getPageState());
}
});
actionsSegment.add(newAssetForm);
+ final MetaForm editAssetForm = new MetaForm(MOVE) {
+ @Override
+ public Form buildForm(final PageState state) {
+
+ final boolean newAsset;
+
+ final Long selectedAssetId = selectedAssetModel
+ .getSelectedKey(state);
+ newAsset = selectedAssetId == null;
+
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+
+ final String selectedAssetType;
+ if (newAsset) {
+ selectedAssetType = (String) newAssetTypeSelect
+ .getValue(state);
+ } else {
+ final AssetRepository assetRepo = cdiUtil
+ .findBean(AssetRepository.class);
+ final Asset asset = assetRepo.findById(selectedAssetModel
+ .getSelectedKey(state))
+ .orElseThrow(() -> new IllegalArgumentException(
+ String.format("No asset with ID %d in the "
+ + "database.",
+ selectedAssetModel
+ .getSelectedKey(state))));
+ selectedAssetType = asset.getClass().getName();
+ }
+
+ final AssetTypesManager typesManager = cdiUtil
+ .findBean(AssetTypesManager.class);
+ final AssetTypeInfo typeInfo = typesManager
+ .getAssetTypeInfo(selectedAssetType);
+ final Class extends AssetForm> assetForm = typeInfo
+ .getAssetForm();
+ try {
+ return assetForm
+ .getConstructor(AssetPane.class)
+ .newInstance(AssetPane.this);
+ } catch (NoSuchMethodException
+ | SecurityException
+ | InstantiationException
+ | IllegalAccessException
+ | InvocationTargetException ex) {
+ throw new UnexpectedErrorException(String.format(
+ "Failed to create form '%s' for editing assets "
+ + "of type '%s'.",
+ assetForm.getName(),
+ selectedAssetType));
+ }
+
+ }
+ };
+ editAssetSegment = panel.addSegment();
+ editAssetSegment.addHeader(
+ new Label(new PrintListener() {
+ @Override
+ public void prepare(final PrintEvent event) {
+
+ final PageState state = event.getPageState();
+ final Label target = (Label) event.getTarget();
+
+ if (selectedAssetModel.isSelected(state)) {
+ target.setLabel(new GlobalizedMessage(
+ "cms.ui.admin.assets.edit",
+ CmsConstants.CMS_BUNDLE));
+ } else {
+ target.setLabel(new GlobalizedMessage(
+ "cms.ui.admin.assets.create",
+ CmsConstants.CMS_BUNDLE));
+ }
+ }
+ }));
+ editAssetSegment.add(editAssetForm);
+
return panel;
}
@@ -509,6 +589,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, true);
newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, false);
+ editAssetSegment.setVisible(state, false);
}
@@ -522,6 +603,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, false);
targetSelector.expose(state);
+ editAssetSegment.setVisible(state, false);
}
protected void newFolderMode(final PageState state) {
@@ -533,6 +615,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, true);
editFolderSegment.setVisible(state, false);
+ editAssetSegment.setVisible(state, false);
}
protected void editFolderMode(final PageState state) {
@@ -542,6 +625,17 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, true);
+ editAssetSegment.setVisible(state, false);
+ }
+
+ protected void editAssetMode(final PageState state) {
+ tree.setVisible(state, false);
+ browseSegment.setVisible(state, false);
+ targetSelector.setVisible(state, false);
+ actionsSegment.setVisible(state, false);
+ newFolderSegment.setVisible(state, false);
+ editFolderSegment.setVisible(state, false);
+ editAssetSegment.setVisible(state, true);
}
@Override
@@ -560,9 +654,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
page.setVisibleDefault(actionsSegment, true);
page.setVisibleDefault(newFolderSegment, false);
page.setVisibleDefault(editFolderSegment, false);
+ page.setVisibleDefault(editAssetSegment, false);
page.addComponentStateParam(this, actionParameter);
page.addComponentStateParam(this, sourcesParameter);
+ page.addComponentStateParam(this, selectedAssetTypeParam);
+ page.addComponentStateParam(this,
+ selectedAssetModel.getStateParameter());
}
@Override
@@ -580,7 +678,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
protected SingleSelectionModel getSelectedAssetModel() {
return selectedAssetModel;
}
-
+
+ protected FolderSelectionModel getFolderSelectionModel() {
+ return folderSelectionModel;
+ }
+
private String[] getSources(final PageState state) {
final String[] result = (String[]) state.getValue(sourcesParameter);
@@ -608,7 +710,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean(
- AssetFolderBrowserController.class);
+ AssetFolderBrowserController.class);
controller.moveObjects(target, objectIds);
}
@@ -617,7 +719,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean(
- AssetFolderBrowserController.class);
+ AssetFolderBrowserController.class);
controller.copyObjects(target, objectIds);
}
@@ -632,14 +734,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (!selectionModel.isSelected(state)) {
final String folder = state
- .getRequest()
- .getParameter(SET_FOLDER);
+ .getRequest()
+ .getParameter(SET_FOLDER);
if (folder == null) {
final Category root = CMS
- .getContext()
- .getContentSection()
- .getRootAssetsFolder();
+ .getContext()
+ .getContentSection()
+ .getRootAssetsFolder();
final Long folderId = root.getObjectId();
selectionModel.setSelectedKey(state, folderId);
@@ -659,18 +761,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
final PageState state = event.getPageState();
final Category root = CMS
- .getContext()
- .getContentSection()
- .getRootAssetsFolder();
+ .getContext()
+ .getContentSection()
+ .getRootAssetsFolder();
if (!root.equals(folderRequestLocal.getFolder(state))) {
// Expand the ancestor nodes of the currently
// selected node.
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderTreeModelController controller = cdiUtil.findBean(
- FolderTreeModelController.class);
+ FolderTreeModelController.class);
final List ancestorIds = controller.findAncestorIds(
- folderRequestLocal.getFolder(state));
+ folderRequestLocal.getFolder(state));
ancestorIds.forEach(id -> tree.expand(id.toString(), state));
}
@@ -692,8 +794,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
protected Long getRootFolderID(final PageState state) {
final ContentSection section = CMS
- .getContext()
- .getContentSection();
+ .getContext()
+ .getContentSection();
return section.getRootAssetsFolder().getObjectId();
}
@@ -711,37 +813,37 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Label label = (Label) event.getTarget();
final int numberOfItems = getSources(state).length;
final Category folder = (Category) folderSelectionModel
- .getSelectedObject(state);
+ .getSelectedObject(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final CategoryManager categoryManager = cdiUtil
- .findBean(CategoryManager.class);
+ .findBean(CategoryManager.class);
final String targetFolderPath;
if (targetFolderModel.getSelectedObject(state) == null) {
targetFolderPath = "";
} else {
targetFolderPath = categoryManager.getCategoryPath(
- targetFolderModel.getSelectedObject(state));
+ targetFolderModel.getSelectedObject(state));
}
if (isMove(state)) {
label.setLabel(new GlobalizedMessage(
- "cms.ui.folder.move",
- CmsConstants.CMS_FOLDER_BUNDLE,
- new Object[]{
- numberOfItems,
- categoryManager.getCategoryPath(folder),
- targetFolderPath
- }));
+ "cms.ui.folder.move",
+ CmsConstants.CMS_FOLDER_BUNDLE,
+ new Object[]{
+ numberOfItems,
+ categoryManager.getCategoryPath(folder),
+ targetFolderPath
+ }));
} else if (isCopy(state)) {
label.setLabel(new GlobalizedMessage(
- "cms.ui.folder.copy",
- CMS_BUNDLE,
- new Object[]{
- numberOfItems,
- categoryManager.getCategoryPath(folder),
- targetFolderPath
- }));
+ "cms.ui.folder.copy",
+ CMS_BUNDLE,
+ new Object[]{
+ numberOfItems,
+ categoryManager.getCategoryPath(folder),
+ targetFolderPath
+ }));
}
}
@@ -770,18 +872,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (folder != null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderManager folderManager = cdiUtil.findBean(
- FolderManager.class);
+ FolderManager.class);
if (!folderManager.getParentFolder(folder).isPresent()) {
folderTree.expand(Long.toString(folder.getObjectId()),
state);
} else {
final List parents = folderManager
- .getParentFolders(folder);
+ .getParentFolders(folder);
parents
- .stream()
- .map(parent -> Long.toString(parent.getObjectId()))
- .forEach(folderId -> folderTree.expand(folderId,
- state));
+ .stream()
+ .map(parent -> Long.toString(parent.getObjectId()))
+ .forEach(folderId -> folderTree.expand(folderId,
+ state));
}
}
}
@@ -806,7 +908,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
private class FolderTreeCellRenderer implements TreeCellRenderer {
private final RequestLocal invalidFoldersRequestLocal
- = new RequestLocal();
+ = new RequestLocal();
/**
* Render the folders appropriately. The selected folder is a bold
@@ -830,18 +932,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (invalidFoldersRequestLocal.get(state) == null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil
- .findBean(AssetFolderBrowserController.class);
+ .findBean(AssetFolderBrowserController.class);
invalidFolders = controller.createInvalidTargetsList(
- Arrays.asList(getSources(state)));
+ Arrays.asList(getSources(state)));
invalidFoldersRequestLocal.set(state, invalidFolders);
} else {
invalidFolders = (List) invalidFoldersRequestLocal
- .get(state);
+ .get(state);
}
final Label label = new Label(value.toString());
if (invalidFolders.contains(String.format(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) {
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) {
return label;
}
@@ -857,11 +959,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
}
private class TargetSelectorValidationListener
- implements FormValidationListener {
+ implements FormValidationListener {
@Override
public void validate(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
@@ -873,24 +975,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
final FormData data = event.getFormData();
if (target == null) {
data.addError(new GlobalizedMessage(
- "cms.ui.folder.need_select_target_folder",
- CmsConstants.CMS_FOLDER_BUNDLE));
+ "cms.ui.folder.need_select_target_folder",
+ CmsConstants.CMS_FOLDER_BUNDLE));
//If the target is null, we can skip the rest of the checks
return;
}
if (target.equals(folderSelectionModel.getSelectedObject(state))) {
data.addError(new GlobalizedMessage(
- "cms.ui.folder.not_within_same_folder",
- CmsConstants.CMS_FOLDER_BUNDLE));
+ "cms.ui.folder.not_within_same_folder",
+ CmsConstants.CMS_FOLDER_BUNDLE));
}
// check create item permission
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final PermissionChecker permissionChecker = cdiUtil.findBean(
- PermissionChecker.class);
+ PermissionChecker.class);
if (!permissionChecker.isPermitted(
- ItemPrivileges.CREATE_NEW, target)) {
+ ItemPrivileges.CREATE_NEW, target)) {
data.addError("cms.ui.folder.no_permission_for_item",
CmsConstants.CMS_FOLDER_BUNDLE);
}
@@ -911,34 +1013,34 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderRepository folderRepo = cdiUtil
- .findBean(FolderRepository.class);
+ .findBean(FolderRepository.class);
final AssetRepository assetRepo = cdiUtil
- .findBean(AssetRepository.class);
+ .findBean(AssetRepository.class);
final AssetManager assetManager = cdiUtil
- .findBean(AssetManager.class);
+ .findBean(AssetManager.class);
final AssetFolderBrowserController controller = cdiUtil
- .findBean(AssetFolderBrowserController.class);
+ .findBean(AssetFolderBrowserController.class);
final FolderManager folderManager = cdiUtil
- .findBean(FolderManager.class);
+ .findBean(FolderManager.class);
final PermissionChecker permissionChecker = cdiUtil.findBean(
- PermissionChecker.class);
+ PermissionChecker.class);
final CcmObject object;
final String name;
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
final long folderId = Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
final Folder folder = folderRepo.findById(folderId).orElseThrow(
- () -> new IllegalArgumentException(String.format(
- "No folder with id %d in database.", folderId)));
+ () -> new IllegalArgumentException(String.format(
+ "No folder with id %d in database.", folderId)));
name = folder.getName();
//Check if folder or subfolder contains in use assets
if (isMove(state)) {
final FolderManager.FolderIsMovable movable = folderManager
- .folderIsMovable(folder, target);
+ .folderIsMovable(folder, target);
switch (movable) {
case DIFFERENT_SECTIONS:
addErrorMessage(data,
@@ -970,23 +1072,23 @@ public class AssetPane extends LayoutPanel implements Resettable {
break;
default:
throw new UnexpectedErrorException(String.format(
- "Unknown state '%s' for '%s'.",
- movable,
- FolderManager.FolderIsMovable.class.
- getName()));
+ "Unknown state '%s' for '%s'.",
+ movable,
+ FolderManager.FolderIsMovable.class.
+ getName()));
}
}
object = folder;
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
final long assetId = Long.parseLong(objectId.substring(
- FOLDER_BROWSER_KEY_PREFIX_ASSET.length()));
+ FOLDER_BROWSER_KEY_PREFIX_ASSET.length()));
final Asset asset = assetRepo
- .findById(assetId)
- .orElseThrow(() -> new IllegalArgumentException(
- String.format(
- "No asset with id %d in the database.",
- assetId)));
+ .findById(assetId)
+ .orElseThrow(() -> new IllegalArgumentException(
+ String.format(
+ "No asset with id %d in the database.",
+ assetId)));
name = asset.getDisplayName();
@@ -997,11 +1099,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
object = asset;
} else {
throw new IllegalArgumentException(String.format(
- "Provided objectId '%s' does not start with '%s' "
- + "or '%s'.",
- objectId,
- FOLDER_BROWSER_KEY_PREFIX_FOLDER,
- FOLDER_BROWSER_KEY_PREFIX_ASSET));
+ "Provided objectId '%s' does not start with '%s' "
+ + "or '%s'.",
+ objectId,
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER,
+ FOLDER_BROWSER_KEY_PREFIX_ASSET));
}
final long count = controller.countObjects(target, name);
@@ -1013,7 +1115,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (!(permissionChecker.isPermitted(
ItemPrivileges.DELETE, object))
- && isMove(state)) {
+ && isMove(state)) {
addErrorMessage(data,
"cms.ui.folder.no_permission_for_item",
object.getDisplayName());
@@ -1040,8 +1142,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override
protected Folder getRootFolder(final PageState state) {
final ContentSection section = CMS
- .getContext()
- .getContentSection();
+ .getContext()
+ .getContentSection();
return section.getRootAssetsFolder();
}
@@ -1055,9 +1157,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (key instanceof String) {
final Long keyAsLong;
if (((String) key).startsWith(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
keyAsLong = Long.parseLong(((String) key).substring(
- FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
+ FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
} else {
keyAsLong = Long.parseLong((String) key);
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/BookmarkForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/BookmarkForm.java
index d09a9c741..772b56815 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/BookmarkForm.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/BookmarkForm.java
@@ -38,8 +38,6 @@ import org.librecms.contentsection.Asset;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
/**
*
@@ -58,8 +56,8 @@ public class BookmarkForm extends AssetForm {
protected void addWidgets() {
add(new Label(
- new GlobalizedMessage("cms.ui.assets.bookmark.description",
- CmsConstants.CMS_BUNDLE)));
+ new GlobalizedMessage("cms.ui.assets.bookmark.description",
+ CmsConstants.CMS_BUNDLE)));
description = new TextArea("bookmark-description");
add(description);
@@ -72,7 +70,7 @@ public class BookmarkForm extends AssetForm {
@Override
public void validate(final FormSectionEvent event)
- throws FormProcessException {
+ throws FormProcessException {
final PageState state = event.getPageState();
final FormData data = event.getFormData();
@@ -81,8 +79,8 @@ public class BookmarkForm extends AssetForm {
new URL((String) url.getValue(state));
} catch (MalformedURLException ex) {
data.addError(new GlobalizedMessage(
- "cms.ui.assets.bookmark.url.malformed",
- CmsConstants.CMS_BUNDLE));
+ "cms.ui.assets.bookmark.url.malformed",
+ CmsConstants.CMS_BUNDLE));
}
}
@@ -92,58 +90,45 @@ public class BookmarkForm extends AssetForm {
@Override
protected Asset createAsset(final PageState state)
- throws FormProcessException {
+ throws FormProcessException {
Objects.requireNonNull(state);
final Bookmark bookmark = new Bookmark();
bookmark
- .getDescription()
- .addValue(KernelConfig.getConfig().getDefaultLocale(),
- (String) description.getValue(state));
+ .getDescription()
+ .addValue(KernelConfig.getConfig().getDefaultLocale(),
+ (String) description.getValue(state));
- try {
- bookmark.setUrl(new URL((String) url.getValue(state)));
- } catch (MalformedURLException ex) {
- throw new FormProcessException(new GlobalizedMessage(
- "cms.ui.assets.bookmark.url.malformed",
- CmsConstants.CMS_BUNDLE));
- }
+ bookmark.setUrl((String) url.getValue(state));
return bookmark;
}
@Override
protected void updateAsset(final Asset asset, final PageState state)
- throws FormProcessException {
+ throws FormProcessException {
Objects.requireNonNull(asset);
Objects.requireNonNull(state);
if (!(asset instanceof Bookmark)) {
throw new IllegalArgumentException(String.format(
- "Provided asset is not an instance of class (or sub class of) "
+ "Provided asset is not an instance of class (or sub class of) "
+ "'%s' but is an instance of class '%s'",
- Bookmark.class.getName(),
- asset.getClass().getName()));
+ Bookmark.class.getName(),
+ asset.getClass().getName()));
}
final Bookmark bookmark = (Bookmark) asset;
bookmark
- .getDescription()
- .addValue(KernelConfig.getConfig().getDefaultLocale(),
- (String) description.getValue(state));
-
- try {
- bookmark.setUrl(new URL((String) url.getValue(state)));
- } catch (MalformedURLException ex) {
- throw new FormProcessException(new GlobalizedMessage(
- "cms.ui.assets.bookmark.url.malformed",
- CmsConstants.CMS_BUNDLE));
- }
+ .getDescription()
+ .addValue(KernelConfig.getConfig().getDefaultLocale(),
+ (String) description.getValue(state));
+ bookmark.setUrl((String) url.getValue(state));
}
}
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java
index f3bc1249d..b1395322f 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java
@@ -51,35 +51,44 @@ public class LegalMetadataForm extends AssetForm {
@Override
protected void addWidgets() {
- add(new Label(new GlobalizedMessage(
- "cms.ui.assets.legalmetadata.rightsholder",
- CmsConstants.CMS_BUNDLE)));
+ add(new Label(new GlobalizedMessage(
+ "cms.ui.assets.legalmetadata.rightsholder",
+ CmsConstants.CMS_BUNDLE)));
rightsHolder = new TextArea("legalmetadata-rightsholder");
add(rightsHolder);
+ add(new Label(new GlobalizedMessage(
+ "cms.ui.assets.legalmetadata.rights",
+ CmsConstants.CMS_BUNDLE)));
rights = new TextArea("legalmetadata-rights");
add(rights);
+ add(new Label(new GlobalizedMessage(
+ "cms.ui.assets.legalmetadata.publisher",
+ CmsConstants.CMS_BUNDLE)));
publisher = new TextArea("legalmetadata-rights");
add(publisher);
+ add(new Label(new GlobalizedMessage(
+ "cms.ui.assets.legalmetadata.creator",
+ CmsConstants.CMS_BUNDLE)));
creator = new TextArea("legalmetadata-creator");
add(creator);
}
@Override
protected Asset createAsset(final PageState state)
- throws FormProcessException {
+ throws FormProcessException {
Objects.requireNonNull(state);
-
+
final LegalMetadata legalMetadata = new LegalMetadata();
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
legalMetadata.getRights().addValue(
- KernelConfig.getConfig().getDefaultLocale(),
- (String) rights.getValue(state));
+ KernelConfig.getConfig().getDefaultLocale(),
+ (String) rights.getValue(state));
legalMetadata.setPublisher((String) publisher.getValue(state));
legalMetadata.setCreator((String) creator.getValue(state));
@@ -89,25 +98,25 @@ public class LegalMetadataForm extends AssetForm {
@Override
protected void updateAsset(final Asset asset, final PageState state)
- throws FormProcessException {
-
+ throws FormProcessException {
+
Objects.requireNonNull(asset);
Objects.requireNonNull(state);
-
+
if (!(asset instanceof LegalMetadata)) {
throw new IllegalArgumentException(String.format(
- "Provided asset is not an instance of '%s' (or a sub class) "
+ "Provided asset is not an instance of '%s' (or a sub class) "
+ "but is an instance of class '%s'.",
- LegalMetadata.class.getName(),
- asset.getClass().getName()));
+ LegalMetadata.class.getName(),
+ asset.getClass().getName()));
}
-
+
final LegalMetadata legalMetadata = (LegalMetadata) asset;
-
+
legalMetadata.setRightsHolder((String) rightsHolder.getValue(state));
legalMetadata.getRights().addValue(
- KernelConfig.getConfig().getDefaultLocale(),
- (String) rights.getValue(state));
+ KernelConfig.getConfig().getDefaultLocale(),
+ (String) rights.getValue(state));
legalMetadata.setPublisher((String) publisher.getValue(state));
legalMetadata.setCreator((String) creator.getValue(state));
diff --git a/ccm-cms/src/main/java/org/librecms/assets/AssetTypesManager.java b/ccm-cms/src/main/java/org/librecms/assets/AssetTypesManager.java
index 32a38ad12..97db086a0 100644
--- a/ccm-cms/src/main/java/org/librecms/assets/AssetTypesManager.java
+++ b/ccm-cms/src/main/java/org/librecms/assets/AssetTypesManager.java
@@ -58,15 +58,15 @@ public class AssetTypesManager {
protected void initialize() {
final ServiceLoader modules = ServiceLoader
- .load(CcmModule.class);
+ .load(CcmModule.class);
final SortedSet> assetTypes = new TreeSet<>(
- (type1, type2) -> type1.getName().compareTo(type2.getName()));
+ (type1, type2) -> type1.getName().compareTo(type2.getName()));
for (final CcmModule module : modules) {
final AssetTypes annotation = module
- .getClass()
- .getAnnotation(AssetTypes.class);
+ .getClass()
+ .getAnnotation(AssetTypes.class);
if (annotation == null) {
continue;
@@ -76,22 +76,22 @@ public class AssetTypesManager {
}
availableAssetTypes = assetTypes
- .stream()
- .filter(type -> type.getAnnotation(AssetType.class) != null)
- .map(assetTypeClass -> createAssetTypeInfo(assetTypeClass))
- .collect(Collectors.toList());
+ .stream()
+ .filter(type -> type.getAnnotation(AssetType.class) != null)
+ .map(assetTypeClass -> createAssetTypeInfo(assetTypeClass))
+ .collect(Collectors.toList());
}
/**
* Helper method for creating the info object for a asset type.
*
* @param assetTypeClass The class which provides the implementation of the
- * asset type.
+ * asset type.
*
* @return A {@link AssetTypeInfo} object describing the asset type.
*/
private AssetTypeInfo createAssetTypeInfo(
- final Class extends Asset> assetTypeClass) {
+ final Class extends Asset> assetTypeClass) {
Objects.requireNonNull(assetTypeClass);
@@ -101,7 +101,7 @@ public class AssetTypesManager {
final String defaultBundleName = String.format("%sBundle",
assetTypeClass.getName());
final AssetType assetType = assetTypeClass
- .getAnnotation(AssetType.class);
+ .getAnnotation(AssetType.class);
if (assetType == null) {
assetTypeInfo.setLabelBundle(defaultBundleName);
@@ -156,7 +156,7 @@ public class AssetTypesManager {
* @return A {@link AssetTypeInfo} object describing the asset type.
*/
public AssetTypeInfo getAssetTypeInfo(
- final Class extends Asset> assetTypeClass) {
+ final Class extends Asset> assetTypeClass) {
Objects.requireNonNull(assetTypeClass);
@@ -168,13 +168,12 @@ public class AssetTypesManager {
* asset type.
*
* @param assetTypeClass The fully qualified name of the class representing
- * the asset type.
+ * the asset type.
*
* @return A {@link AssetTypeInfo} object describing the asset type.
*
* @throws IllegalArgumentException If no class with the provided name
- * exists or the class is not a subclass of
- * {@link Asset}.
+ * exists or the class is not a subclass of {@link Asset}.
*/
@SuppressWarnings("unchecked")
public AssetTypeInfo getAssetTypeInfo(final String assetTypeClass) {
@@ -186,15 +185,15 @@ public class AssetTypesManager {
clazz = Class.forName(assetTypeClass);
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException(String.format(
- "There is not class \"%s\".", assetTypeClass),
+ "There is no class \"%s\".", assetTypeClass),
ex);
}
if (!Asset.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException(String.format(
- "Class \"%s\" is not a subclass of of \"%s\".",
- assetTypeClass,
- Asset.class.getName()));
+ "Class \"%s\" is not a subclass of of \"%s\".",
+ assetTypeClass,
+ Asset.class.getName()));
}
return getAssetTypeInfo((Class extends Asset>) clazz);
diff --git a/ccm-cms/src/main/java/org/librecms/assets/Bookmark.java b/ccm-cms/src/main/java/org/librecms/assets/Bookmark.java
index 92ad4d009..2c87119c9 100644
--- a/ccm-cms/src/main/java/org/librecms/assets/Bookmark.java
+++ b/ccm-cms/src/main/java/org/librecms/assets/Bookmark.java
@@ -73,7 +73,7 @@ public class Bookmark extends Asset implements Serializable {
@Column(name = "URL", length = 2048, nullable = false)
@NotEmpty
- private URL url;
+ private String url;
public Bookmark() {
super();
@@ -88,11 +88,11 @@ public class Bookmark extends Asset implements Serializable {
this.description = description;
}
- public URL getUrl() {
+ public String getUrl() {
return url;
}
- public void setUrl(final URL url) {
+ public void setUrl(final String url) {
this.url = url;
}
diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/AssetRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/AssetRepository.java
index 5ed508d3f..5f5be337d 100644
--- a/ccm-cms/src/main/java/org/librecms/contentsection/AssetRepository.java
+++ b/ccm-cms/src/main/java/org/librecms/contentsection/AssetRepository.java
@@ -97,7 +97,8 @@ public class AssetRepository
public void save(
@RequiresPrivilege(AssetPrivileges.EDIT)
final Asset asset) {
-
+
+ super.save(asset);
}
/**
diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
index d9bbdd8b1..8c28191a6 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
@@ -248,3 +248,7 @@ cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets
cms.ui.assets.new=Create new asset
cms.ui.assets.new.create=Create asset
+cms.ui.asset.title=Title
+cms.ui.admin.assets.create=Create new asset
+cms.ui.assets.bookmark.description=Description
+cms.ui.assets.bookmark.url=URL
diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties
index e666e32e1..b9eb95e88 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties
@@ -247,3 +247,7 @@ cms.ui.assets=Medien & Daten
cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden
cms.ui.assets.new=Neues Asset anlegen
cms.ui.assets.new.create=Asset anlegen
+cms.ui.asset.title=Titel
+cms.ui.admin.assets.create=Neues Asset anlegen
+cms.ui.assets.bookmark.description=Beschreibung
+cms.ui.assets.bookmark.url=URL
diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties
index f3a9b9a73..4d6ac5875 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties
@@ -206,3 +206,7 @@ cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets
cms.ui.assets.new=Create new asset
cms.ui.assets.new.create=Create asset
+cms.ui.asset.title=Title
+cms.ui.admin.assets.create=Create new asset
+cms.ui.assets.bookmark.description=Description
+cms.ui.assets.bookmark.url=URL