CCM NG/ccm-cms: AssetForm localisation

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4666 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2017-04-10 17:02:48 +00:00
parent ddddc1f060
commit 5fdeb3b9eb
8 changed files with 279 additions and 257 deletions

View File

@ -50,6 +50,8 @@ import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager; import org.librecms.contentsection.ContentSectionManager;
import static org.librecms.CmsConstants.*;
/** /**
* Browse folder and assets. * Browse folder and assets.
* *
@ -71,9 +73,9 @@ public class AssetFolderBrowser extends Table {
private TableColumn nameColumn; private TableColumn nameColumn;
private TableColumn deleteColumn; private TableColumn deleteColumn;
private final StringParameter sortTypeParameter = new StringParameter( private final StringParameter sortTypeParameter = new StringParameter(
"sortType"); "sortType");
private final StringParameter sortDirectionParameter = new StringParameter( private final StringParameter sortDirectionParameter = new StringParameter(
"sortDir"); "sortDir");
private Paginator paginator; private Paginator paginator;
private long folderSize; private long folderSize;
@ -93,12 +95,18 @@ public class AssetFolderBrowser extends Table {
setModelBuilder(new AssetFolderBrowserTableModelBuilder()); setModelBuilder(new AssetFolderBrowserTableModelBuilder());
final GlobalizedMessage[] headers = { final GlobalizedMessage[] headers = {
globalize("cms.ui.folder.name"), new GlobalizedMessage("cms.ui.folder.name",
globalize("cms.ui.folder.title"), CMS_FOLDER_BUNDLE),
globalize("cms.ui.folder.type"), new GlobalizedMessage("cms.ui.folder.title",
globalize("cms.ui.folder.creation_date"), CMS_FOLDER_BUNDLE),
globalize("cms.ui.folder.last_modified"), new GlobalizedMessage("cms.ui.folder.type",
globalize("cms.ui.folder.action")}; CMS_FOLDER_BUNDLE),
new GlobalizedMessage("cms.ui.folder.creation_date",
CMS_FOLDER_BUNDLE),
new GlobalizedMessage("cms.ui.folder.last_modified",
CMS_FOLDER_BUNDLE),
new GlobalizedMessage("cms.ui.folder.action",
CMS_FOLDER_BUNDLE)};
setModelBuilder(new AssetFolderBrowserTableModelBuilder()); setModelBuilder(new AssetFolderBrowserTableModelBuilder());
setColumnModel(new DefaultTableColumnModel(headers)); setColumnModel(new DefaultTableColumnModel(headers));
@ -106,23 +114,23 @@ public class AssetFolderBrowser extends Table {
setClassAttr("dataTable"); setClassAttr("dataTable");
getHeader().setDefaultRenderer( getHeader().setDefaultRenderer(
new com.arsdigita.cms.ui.util.DefaultTableCellRenderer()); new com.arsdigita.cms.ui.util.DefaultTableCellRenderer());
nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME); nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME);
nameColumn.setCellRenderer(new NameCellRenderer()); nameColumn.setCellRenderer(new NameCellRenderer());
nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME)); nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME));
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE) getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
.setHeaderRenderer( .setHeaderRenderer(
new HeaderCellRenderer(SORT_KEY_CREATION_DATE)); new HeaderCellRenderer(SORT_KEY_CREATION_DATE));
getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE) getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE)
.setCellRenderer(new DateCellRenderer()); .setCellRenderer(new DateCellRenderer());
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED) getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
.setHeaderRenderer(new HeaderCellRenderer( .setHeaderRenderer(new HeaderCellRenderer(
SORT_KEY_LAST_MODIFIED_DATE)); SORT_KEY_LAST_MODIFIED_DATE));
getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED) getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED)
.setCellRenderer(new DateCellRenderer()); .setCellRenderer(new DateCellRenderer());
deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE); deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE);
deleteColumn.setCellRenderer(new ActionCellRenderer()); deleteColumn.setCellRenderer(new ActionCellRenderer());
@ -134,7 +142,8 @@ public class AssetFolderBrowser extends Table {
folderDeleter = new ItemDeleter(); folderDeleter = new ItemDeleter();
addTableActionListener(folderDeleter); addTableActionListener(folderDeleter);
setEmptyView(new Label(globalize("cms.ui.folder.no_assets"))); setEmptyView(new Label(new GlobalizedMessage("cms.ui.folder.no_assets",
CMS_FOLDER_BUNDLE)));
} }
@Override @Override
@ -143,8 +152,8 @@ public class AssetFolderBrowser extends Table {
super.register(page); super.register(page);
page.addComponentStateParam( page.addComponentStateParam(
this, this,
getFolderSelectionModel().getStateParameter()); getFolderSelectionModel().getStateParameter());
page.addComponentStateParam(this, sortTypeParameter); page.addComponentStateParam(this, sortTypeParameter);
page.addComponentStateParam(this, sortDirectionParameter); page.addComponentStateParam(this, sortDirectionParameter);
} }
@ -173,16 +182,6 @@ public class AssetFolderBrowser extends Table {
return (String) state.getValue(sortDirectionParameter); return (String) state.getValue(sortDirectionParameter);
} }
/**
* Getting the GlobalizedMessage using a CMS Class targetBundle.
*
* @param key The resource key
*/
private GlobalizedMessage globalize(final String key) {
return new GlobalizedMessage(key, CmsConstants.CMS_FOLDER_BUNDLE);
}
private class HeaderCellRenderer extends DefaultTableCellRenderer { private class HeaderCellRenderer extends DefaultTableCellRenderer {
private final String headerKey; private final String headerKey;
@ -205,7 +204,7 @@ public class AssetFolderBrowser extends Table {
final String sortKey = (String) state.getValue(sortTypeParameter); final String sortKey = (String) state.getValue(sortTypeParameter);
final boolean isCurrentKey = sortKey.equals(key); final boolean isCurrentKey = sortKey.equals(key);
final String currentSortDirection = (String) state final String currentSortDirection = (String) state
.getValue(sortDirectionParameter); .getValue(sortDirectionParameter);
final String imageUrlStub; final String imageUrlStub;
if (SORT_ACTION_UP.equals(currentSortDirection)) { if (SORT_ACTION_UP.equals(currentSortDirection)) {
@ -222,7 +221,7 @@ public class AssetFolderBrowser extends Table {
// by default, everything sorts "up" unless it // by default, everything sorts "up" unless it
// is the current key and it is already pointing up // is the current key and it is already pointing up
if (SORT_ACTION_UP.equals(currentSortDirection) if (SORT_ACTION_UP.equals(currentSortDirection)
&& isCurrentKey) { && isCurrentKey) {
sortDirectionAction = SORT_ACTION_DOWN; sortDirectionAction = SORT_ACTION_DOWN;
} else { } else {
sortDirectionAction = SORT_ACTION_UP; sortDirectionAction = SORT_ACTION_UP;
@ -273,14 +272,14 @@ public class AssetFolderBrowser extends Table {
final String name = (String) value; final String name = (String) value;
final ContentSection section = CMS.getContext(). final ContentSection section = CMS.getContext().
getContentSection(); getContentSection();
final ContentSectionManager sectionManager = CdiUtil. final ContentSectionManager sectionManager = CdiUtil.
createCdiUtil() createCdiUtil()
.findBean(ContentSectionManager.class); .findBean(ContentSectionManager.class);
final boolean isFolder = ((AssetFolderBrowserTableModel) table final boolean isFolder = ((AssetFolderBrowserTableModel) table
.getTableModel(state)) .getTableModel(state))
.isFolder(); .isFolder();
final long objectId = getObjectId(key); final long objectId = getObjectId(key);
if (isFolder) { if (isFolder) {
@ -294,7 +293,7 @@ public class AssetFolderBrowser extends Table {
column); column);
} else { } else {
return new ControlLink(new Text(name)); return new ControlLink(new Text(name));
// return new Link(new Text(name), // return new Link(new Text(name),
// itemResolver.generateItemURL(state, // itemResolver.generateItemURL(state,
// objectId, // objectId,
@ -345,13 +344,13 @@ public class AssetFolderBrowser extends Table {
return new Label(" ", false); return new Label(" ", false);
} else { } else {
final ControlLink link = new ControlLink( final ControlLink link = new ControlLink(
new Label( new Label(
new GlobalizedMessage("cms.ui.folder.delete", new GlobalizedMessage("cms.ui.folder.delete",
CmsConstants.CMS_FOLDER_BUNDLE))); CmsConstants.CMS_FOLDER_BUNDLE)));
link.setConfirmation( link.setConfirmation(
new GlobalizedMessage( new GlobalizedMessage(
"cms.ui.folder.delete_confirmation_assets", "cms.ui.folder.delete_confirmation_assets",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
return link; return link;
} }
} }
@ -373,7 +372,7 @@ public class AssetFolderBrowser extends Table {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean( final AssetFolderBrowserController controller = cdiUtil.findBean(
AssetFolderBrowserController.class); AssetFolderBrowserController.class);
controller.deleteObject((String) event.getRowKey()); controller.deleteObject((String) event.getRowKey());
((Table) event.getSource()).clearSelection(state); ((Table) event.getSource()).clearSelection(state);
@ -398,7 +397,7 @@ public class AssetFolderBrowser extends Table {
getFolderSelectionModel().setSelectedKey(state, getFolderSelectionModel().setSelectedKey(state,
getObjectId(rowKey)); getObjectId(rowKey));
} else if (rowKey.startsWith( } else if (rowKey.startsWith(
CmsConstants.FOLDER_BROWSER_KEY_PREFIX_ASSET)) { CmsConstants.FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
getSelectedAssetModel().setSelectedKey(state, getSelectedAssetModel().setSelectedKey(state,
getObjectId(rowKey)); getObjectId(rowKey));
assetPane.editAssetMode(state); assetPane.editAssetMode(state);

View File

@ -98,8 +98,6 @@ class AssetFolderBrowserTableModel implements TableModel {
} else { } else {
return String.format("asset-%d", currentRow.getObjectId()); return String.format("asset-%d", currentRow.getObjectId());
} }
// return currentRow.getObjectId();
} }
public boolean isFolder() { public boolean isFolder() {

View File

@ -23,7 +23,6 @@ import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.SingleSelectionModel; import com.arsdigita.bebop.SingleSelectionModel;
@ -38,7 +37,6 @@ import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.form.Submit;
import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
@ -71,7 +69,6 @@ public abstract class AssetForm extends Form implements FormInitListener,
private final AssetPane assetPane; private final AssetPane assetPane;
private final SingleSelectionModel<Long> selectionModel; private final SingleSelectionModel<Long> selectionModel;
// private final StringParameter selectedLocaleParameter;
private BoxPanel showLocalePanel; private BoxPanel showLocalePanel;
private SingleSelect showLocaleSelect; private SingleSelect showLocaleSelect;
@ -89,13 +86,12 @@ public abstract class AssetForm extends Form implements FormInitListener,
this.assetPane = assetPane; this.assetPane = assetPane;
selectionModel = assetPane.getSelectedAssetModel(); selectionModel = assetPane.getSelectedAssetModel();
// selectedLocaleParameter = new StringParameter("selected-locale");
initComponents(); initComponents();
} }
private void initComponents() { private void initComponents() {
showLocalePanel = new BoxPanel(BoxPanel.HORIZONTAL); showLocalePanel = new BoxPanel(BoxPanel.HORIZONTAL);
final Label showLocaleLabel = new Label(new PrintListener() { final Label showLocaleLabel = new Label(new PrintListener() {
@ -106,11 +102,11 @@ public abstract class AssetForm extends Form implements FormInitListener,
final Label target = (Label) event.getTarget(); final Label target = (Label) event.getTarget();
if (selectedAsset.isPresent()) { if (selectedAsset.isPresent()) {
target.setLabel(new GlobalizedMessage( target.setLabel(new GlobalizedMessage(
"cms.ui.assest.show_locale", "cms.ui.asset.show_locale",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
} else { } else {
target.setLabel(new GlobalizedMessage( target.setLabel(new GlobalizedMessage(
"cms.ui.assest.initial_locale", "cms.ui.asset.initial_locale",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
} }
} }
@ -183,7 +179,7 @@ public abstract class AssetForm extends Form implements FormInitListener,
}; };
final Label addLocaleLabel = new Label( final Label addLocaleLabel = new Label(
new GlobalizedMessage("cms.ui.assest.add_locale", new GlobalizedMessage("cms.ui.asset.add_locale",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
addLocaleSelect = new SingleSelect("add-locale-select"); addLocaleSelect = new SingleSelect("add-locale-select");
try { try {
@ -248,15 +244,6 @@ public abstract class AssetForm extends Form implements FormInitListener,
//Nothing here //Nothing here
} }
// @Override
// public void register(final Page page) {
// super.register(page);
//
// page.addComponentStateParam(this, selectedLocaleParameter);
//
// page.setVisibleDefault(showLocalePanel, true);
// page.setVisibleDefault(addLocalePanel, true);
// }
protected String getTitle(final PageState state) { protected String getTitle(final PageState state) {
return (String) title.getValue(state); return (String) title.getValue(state);
} }
@ -287,8 +274,6 @@ public abstract class AssetForm extends Form implements FormInitListener,
final Optional<Asset> selectedAsset = getSelectedAsset(state); final Optional<Asset> selectedAsset = getSelectedAsset(state);
if (selectedAsset.isPresent()) { if (selectedAsset.isPresent()) {
// showLocalePanel.setVisible(state, true);
// addLocalePanel.setVisible(state, true);
showLocaleSelect.setValue(state, showLocaleSelect.setValue(state,
KernelConfig KernelConfig
@ -307,8 +292,6 @@ public abstract class AssetForm extends Form implements FormInitListener,
.getConfig() .getConfig()
.getDefaultLocale() .getDefaultLocale()
.toString()); .toString());
// showLocalePanel.setVisible(state, false);
// addLocalePanel.setVisible(state, false);
} }
initForm(state, selectedAsset); initForm(state, selectedAsset);

View File

@ -124,11 +124,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
private final FolderRequestLocal folderRequestLocal; private final FolderRequestLocal folderRequestLocal;
private final SingleSelectionModel<Long> selectedAssetModel; private final SingleSelectionModel<Long> selectedAssetModel;
private final ArrayParameter sourcesParameter = new ArrayParameter( private final ArrayParameter sourcesParameter = new ArrayParameter(
new StringParameter(SOURCES_PARAM)); new StringParameter(SOURCES_PARAM));
private final StringParameter actionParameter = new StringParameter( private final StringParameter actionParameter = new StringParameter(
ACTION_PARAM); ACTION_PARAM);
private final StringParameter selectedAssetTypeParam = new StringParameter( private final StringParameter selectedAssetTypeParam = new StringParameter(
"selected_asset_type"); "selected_asset_type");
private AssetFolderBrowser folderBrowser; private AssetFolderBrowser folderBrowser;
private Form browserForm; private Form browserForm;
@ -150,8 +150,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
protected Folder getRootFolder(final PageState state) { protected Folder getRootFolder(final PageState state) {
final ContentSection section = CMS final ContentSection section = CMS
.getContext() .getContext()
.getContentSection(); .getContentSection();
return section.getRootAssetsFolder(); return section.getRootAssetsFolder();
} }
@ -162,8 +162,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
protected Long getRootFolderID(final PageState state) { protected Long getRootFolderID(final PageState state) {
final ContentSection section = CMS final ContentSection section = CMS
.getContext() .getContext()
.getContentSection(); .getContentSection();
return section.getRootAssetsFolder().getObjectId(); return section.getRootAssetsFolder().getObjectId();
} }
@ -171,14 +171,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
folderRequestLocal = new FolderRequestLocal(folderSelectionModel); folderRequestLocal = new FolderRequestLocal(folderSelectionModel);
selectedAssetModel = new ParameterSingleSelectionModel<>( selectedAssetModel = new ParameterSingleSelectionModel<>(
new LongParameter("selected-asset")); new LongParameter("selected-asset"));
final SegmentedPanel left = new SegmentedPanel(); final SegmentedPanel left = new SegmentedPanel();
setLeft(left); setLeft(left);
final Label heading = new Label( final Label heading = new Label(
new GlobalizedMessage("cms.ui.folder_browser", new GlobalizedMessage("cms.ui.folder_browser",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
left.addSegment(heading, tree); left.addSegment(heading, tree);
// final Text placeholder = new Text("Placeholder"); // final Text placeholder = new Text("Placeholder");
@ -196,15 +196,15 @@ public class AssetPane extends LayoutPanel implements Resettable {
browserForm.setMethod(Form.GET); browserForm.setMethod(Form.GET);
folderBrowser = new AssetFolderBrowser(this); folderBrowser = new AssetFolderBrowser(this);
final Paginator paginator = new Paginator( final Paginator paginator = new Paginator(
new AssetFolderBrowserPaginationModelBuilder(folderBrowser), new AssetFolderBrowserPaginationModelBuilder(folderBrowser),
CMSConfig.getConfig().getFolderBrowseListSize()); CMSConfig.getConfig().getFolderBrowseListSize());
folderBrowser.setPaginator(paginator); folderBrowser.setPaginator(paginator);
final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter); final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter);
browserForm.add(checkboxGroup); browserForm.add(checkboxGroup);
final TableColumn checkboxCol = new TableColumn(); final TableColumn checkboxCol = new TableColumn();
checkboxCol.setHeaderValue( checkboxCol.setHeaderValue(
new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE)); new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE));
checkboxCol.setCellRenderer(new TableCellRenderer() { checkboxCol.setCellRenderer(new TableCellRenderer() {
@Override @Override
@ -229,31 +229,31 @@ public class AssetPane extends LayoutPanel implements Resettable {
browserForm.add(folderBrowser); browserForm.add(folderBrowser);
final SimpleContainer actionFormContainer = new SimpleContainer(); final SimpleContainer actionFormContainer = new SimpleContainer();
actionFormContainer.add(new Label( actionFormContainer.add(new Label(
new GlobalizedMessage( new GlobalizedMessage(
"cms.ui.folder.edit_selection", "cms.ui.folder.edit_selection",
CmsConstants.CMS_FOLDER_BUNDLE))); CmsConstants.CMS_FOLDER_BUNDLE)));
actionSelect = new SingleSelect(actionParameter); actionSelect = new SingleSelect(actionParameter);
actionSelect.addOption( actionSelect.addOption(
new Option(COPY, new Option(COPY,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"cms.ui.folder.copy.action", "cms.ui.folder.copy.action",
CmsConstants.CMS_FOLDER_BUNDLE)))); CmsConstants.CMS_FOLDER_BUNDLE))));
actionSelect.addOption( actionSelect.addOption(
new Option(MOVE, new Option(MOVE,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"cms.ui.folder.move.action", "cms.ui.folder.move.action",
CmsConstants.CMS_FOLDER_BUNDLE)))); CmsConstants.CMS_FOLDER_BUNDLE))));
actionFormContainer.add(actionSelect); actionFormContainer.add(actionSelect);
actionSubmit = new Submit( actionSubmit = new Submit(
"Go", "Go",
new GlobalizedMessage("cms.ui.folder.go", new GlobalizedMessage("cms.ui.folder.go",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
actionFormContainer.add(actionSubmit); actionFormContainer.add(actionSubmit);
browserForm.addProcessListener(new FormProcessListener() { browserForm.addProcessListener(new FormProcessListener() {
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -269,7 +269,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -290,12 +290,12 @@ public class AssetPane extends LayoutPanel implements Resettable {
}); });
targetSelector.addValidationListener( targetSelector.addValidationListener(
new TargetSelectorValidationListener()); new TargetSelectorValidationListener());
targetSelector.addSubmissionListener(new FormSubmissionListener() { targetSelector.addSubmissionListener(new FormSubmissionListener() {
@Override @Override
public void submitted(final FormSectionEvent event) public void submitted(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -303,8 +303,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
reset(state); reset(state);
browseMode(state); browseMode(state);
throw new FormProcessException(new GlobalizedMessage( throw new FormProcessException(new GlobalizedMessage(
"cms.ui.folder.cancelled", "cms.ui.folder.cancelled",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
} }
} }
@ -326,13 +326,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Label target = (Label) event.getTarget(); final Label target = (Label) event.getTarget();
final long selectedId = Long.parseLong(selectionModel final long selectedId = Long.parseLong(selectionModel
.getSelectedKey(state).toString()); .getSelectedKey(state).toString());
final long currentFolderId = folderSelectionModel final long currentFolderId = folderSelectionModel
.getSelectedObject(state).getObjectId(); .getSelectedObject(state).getObjectId();
target.setLabel(String.format( target.setLabel(String.format(
"selectedId = %d; currentFolderId = %d", "selectedId = %d; currentFolderId = %d",
selectedId, selectedId,
currentFolderId)); currentFolderId));
} }
}); });
@ -345,19 +345,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.add(actions); actionsSegment.add(actions);
final FolderCreateForm folderCreateForm = new FolderCreateForm( final FolderCreateForm folderCreateForm = new FolderCreateForm(
"fcreat", folderSelectionModel); "fcreat", folderSelectionModel);
folderCreateForm.addSubmissionListener(new FormSubmissionListener() { folderCreateForm.addSubmissionListener(new FormSubmissionListener() {
@Override @Override
public void submitted(final FormSectionEvent event) public void submitted(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
if (event.getSource() == folderCreateForm if (event.getSource() == folderCreateForm
&& folderCreateForm.isCancelled(state)) { && folderCreateForm.isCancelled(state)) {
browseMode(state); browseMode(state);
throw new FormProcessException(new GlobalizedMessage( throw new FormProcessException(new GlobalizedMessage(
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
} }
} }
@ -367,7 +367,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Object source = event.getSource(); final Object source = event.getSource();
@ -378,24 +378,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
}); });
newFolderSegment = panel.addSegment( newFolderSegment = panel.addSegment(
new Label(new GlobalizedMessage("cms.ui.new_folder", new Label(new GlobalizedMessage("cms.ui.new_folder",
CmsConstants.CMS_BUNDLE)), CmsConstants.CMS_BUNDLE)),
folderCreateForm); folderCreateForm);
final FolderEditorForm folderEditorForm = new FolderEditorForm( final FolderEditorForm folderEditorForm = new FolderEditorForm(
"fedit", folderSelectionModel); "fedit", folderSelectionModel);
folderEditorForm.addSubmissionListener(new FormSubmissionListener() { folderEditorForm.addSubmissionListener(new FormSubmissionListener() {
@Override @Override
public void submitted(final FormSectionEvent event) public void submitted(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
if (event.getSource() == folderEditorForm if (event.getSource() == folderEditorForm
&& folderEditorForm.isCancelled(state)) { && folderEditorForm.isCancelled(state)) {
browseMode(state); browseMode(state);
throw new FormProcessException(new GlobalizedMessage( throw new FormProcessException(new GlobalizedMessage(
"cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); "cms.ui.cancelled", CmsConstants.CMS_BUNDLE));
} }
} }
@ -404,7 +404,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Object source = event.getSource(); final Object source = event.getSource();
@ -415,13 +415,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
}); });
editFolderSegment = panel.addSegment( editFolderSegment = panel.addSegment(
new Label(new GlobalizedMessage("cms.ui.edit_folder", new Label(new GlobalizedMessage("cms.ui.edit_folder",
CmsConstants.CMS_BUNDLE)), CmsConstants.CMS_BUNDLE)),
folderEditorForm); folderEditorForm);
final ActionLink createFolderAction = new ActionLink( final ActionLink createFolderAction = new ActionLink(
new Label(new GlobalizedMessage("cms.ui.new_folder", new Label(new GlobalizedMessage("cms.ui.new_folder",
CmsConstants.CMS_BUNDLE))); CmsConstants.CMS_BUNDLE)));
createFolderAction.addActionListener(new ActionListener() { createFolderAction.addActionListener(new ActionListener() {
@Override @Override
@ -437,8 +437,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
actions.addAction(createFolderAction); actions.addAction(createFolderAction);
final ActionLink editFolderAction = new ActionLink( final ActionLink editFolderAction = new ActionLink(
new Label(new GlobalizedMessage("cms.ui.edit_folder", new Label(new GlobalizedMessage("cms.ui.edit_folder",
CmsConstants.CMS_BUNDLE))); CmsConstants.CMS_BUNDLE)));
editFolderAction.addActionListener(new ActionListener() { editFolderAction.addActionListener(new ActionListener() {
@Override @Override
@ -456,9 +456,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Form newAssetForm = new Form("new-asset-form", final Form newAssetForm = new Form("new-asset-form",
new BoxPanel(BoxPanel.HORIZONTAL)); new BoxPanel(BoxPanel.HORIZONTAL));
newAssetForm.add(new Label(new GlobalizedMessage( 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( final SingleSelect newAssetTypeSelect = new SingleSelect(
selectedAssetTypeParam); selectedAssetTypeParam);
try { try {
newAssetTypeSelect.addPrintListener(new PrintListener() { newAssetTypeSelect.addPrintListener(new PrintListener() {
@ -466,19 +466,19 @@ public class AssetPane extends LayoutPanel implements Resettable {
public void prepare(final PrintEvent event) { public void prepare(final PrintEvent event) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetTypesManager typesManager = cdiUtil final AssetTypesManager typesManager = cdiUtil
.findBean(AssetTypesManager.class); .findBean(AssetTypesManager.class);
final SingleSelect target = (SingleSelect) event.getTarget(); final SingleSelect target = (SingleSelect) event.getTarget();
target.clearOptions(); target.clearOptions();
for (final AssetTypeInfo type : typesManager for (final AssetTypeInfo type : typesManager
.getAvailableAssetTypes()) { .getAvailableAssetTypes()) {
final String labelKey = type.getLabelKey(); final String labelKey = type.getLabelKey();
final String labelBundle = type.getLabelBundle(); final String labelBundle = type.getLabelBundle();
final ResourceBundle bundle = ResourceBundle final ResourceBundle bundle = ResourceBundle
.getBundle(labelBundle); .getBundle(labelBundle);
final String label = bundle.getString(labelKey); final String label = bundle.getString(labelKey);
target.addOption(new Option( target.addOption(new Option(
type.getAssetClass().getName(), type.getAssetClass().getName(),
new Text(label))); new Text(label)));
} }
} }
@ -488,12 +488,12 @@ public class AssetPane extends LayoutPanel implements Resettable {
} }
newAssetForm.add(newAssetTypeSelect); newAssetForm.add(newAssetTypeSelect);
newAssetForm.add(new Submit(new GlobalizedMessage( 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() { newAssetForm.addProcessListener(new FormProcessListener() {
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
editAssetMode(event.getPageState()); editAssetMode(event.getPageState());
} }
@ -502,13 +502,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.add(newAssetForm); actionsSegment.add(newAssetForm);
final MetaForm editAssetForm = new MetaForm("editAsset") { final MetaForm editAssetForm = new MetaForm("editAsset") {
@Override @Override
public Form buildForm(final PageState state) { public Form buildForm(final PageState state) {
final boolean newAsset; final boolean newAsset;
final Long selectedAssetId = selectedAssetModel final Long selectedAssetId = selectedAssetModel
.getSelectedKey(state); .getSelectedKey(state);
newAsset = selectedAssetId == null; newAsset = selectedAssetId == null;
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
@ -516,64 +517,82 @@ public class AssetPane extends LayoutPanel implements Resettable {
final String selectedAssetType; final String selectedAssetType;
if (newAsset) { if (newAsset) {
selectedAssetType = (String) newAssetTypeSelect selectedAssetType = (String) newAssetTypeSelect
.getValue(state); .getValue(state);
} else { } else {
final AssetRepository assetRepo = cdiUtil final AssetRepository assetRepo = cdiUtil
.findBean(AssetRepository.class); .findBean(AssetRepository.class);
final Asset asset = assetRepo.findById(selectedAssetModel final Asset asset = assetRepo.findById(selectedAssetModel
.getSelectedKey(state)) .getSelectedKey(state))
.orElseThrow(() -> new IllegalArgumentException( .orElseThrow(() -> new IllegalArgumentException(
String.format("No asset with ID %d in the " String.format("No asset with ID %d in the "
+ "database.", + "database.",
selectedAssetModel selectedAssetModel
.getSelectedKey(state)))); .getSelectedKey(state))));
selectedAssetType = asset.getClass().getName(); selectedAssetType = asset.getClass().getName();
} }
final AssetTypesManager typesManager = cdiUtil final AssetTypesManager typesManager = cdiUtil
.findBean(AssetTypesManager.class); .findBean(AssetTypesManager.class);
final AssetTypeInfo typeInfo = typesManager final AssetTypeInfo typeInfo = typesManager
.getAssetTypeInfo(selectedAssetType); .getAssetTypeInfo(selectedAssetType);
final Class<? extends AssetForm> assetForm = typeInfo final Class<? extends AssetForm> assetForm = typeInfo
.getAssetForm(); .getAssetForm();
try { try {
return assetForm return assetForm
.getConstructor(AssetPane.class) .getConstructor(AssetPane.class)
.newInstance(AssetPane.this); .newInstance(AssetPane.this);
} catch (NoSuchMethodException } catch (NoSuchMethodException
| SecurityException | SecurityException
| InstantiationException | InstantiationException
| IllegalAccessException | IllegalAccessException
| InvocationTargetException ex) { | InvocationTargetException ex) {
throw new UnexpectedErrorException(String.format( throw new UnexpectedErrorException(String.format(
"Failed to create form '%s' for editing assets " "Failed to create form '%s' for editing assets "
+ "of type '%s'.", + "of type '%s'.",
assetForm.getName(), assetForm.getName(),
selectedAssetType)); selectedAssetType));
} }
} }
}; };
editAssetSegment = panel.addSegment(); editAssetSegment = panel.addSegment();
editAssetSegment.addHeader( editAssetSegment.addHeader(
new Label(new PrintListener() { new Label(new PrintListener() {
@Override
public void prepare(final PrintEvent event) {
final PageState state = event.getPageState(); @Override
final Label target = (Label) event.getTarget(); public void prepare(final PrintEvent event) {
if (selectedAssetModel.isSelected(state)) { final PageState state = event.getPageState();
target.setLabel(new GlobalizedMessage( final Label target = (Label) event.getTarget();
"cms.ui.admin.assets.edit",
CmsConstants.CMS_BUNDLE)); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
} else { final AssetTypesManager typesManager = cdiUtil
target.setLabel(new GlobalizedMessage( .findBean(AssetTypesManager.class);
"cms.ui.admin.assets.create",
CmsConstants.CMS_BUNDLE)); if (selectedAssetModel.isSelected(state)) {
} target.setLabel(
new GlobalizedMessage(
"cms.ui.admin.assets.edit",
CmsConstants.CMS_BUNDLE));
} else {
final String assetType = (String) newAssetTypeSelect
.getValue(state);
final AssetTypeInfo typeInfo = typesManager
.getAssetTypeInfo(assetType);
final ResourceBundle bundle = ResourceBundle.getBundle(
typeInfo.getLabelBundle());
final String typeLabel = bundle
.getString(typeInfo.getLabelKey());
target.setLabel(new GlobalizedMessage(
"cms.ui.admin.assets.create",
CmsConstants.CMS_BUNDLE,
new Object[]{typeLabel}));
} }
})); }
}));
editAssetSegment.add(editAssetForm); editAssetSegment.add(editAssetForm);
return panel; return panel;
@ -710,7 +729,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean( final AssetFolderBrowserController controller = cdiUtil.findBean(
AssetFolderBrowserController.class); AssetFolderBrowserController.class);
controller.moveObjects(target, objectIds); controller.moveObjects(target, objectIds);
} }
@ -719,7 +738,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil.findBean( final AssetFolderBrowserController controller = cdiUtil.findBean(
AssetFolderBrowserController.class); AssetFolderBrowserController.class);
controller.copyObjects(target, objectIds); controller.copyObjects(target, objectIds);
} }
@ -734,14 +753,14 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (!selectionModel.isSelected(state)) { if (!selectionModel.isSelected(state)) {
final String folder = state final String folder = state
.getRequest() .getRequest()
.getParameter(SET_FOLDER); .getParameter(SET_FOLDER);
if (folder == null) { if (folder == null) {
final Category root = CMS final Category root = CMS
.getContext() .getContext()
.getContentSection() .getContentSection()
.getRootAssetsFolder(); .getRootAssetsFolder();
final Long folderId = root.getObjectId(); final Long folderId = root.getObjectId();
selectionModel.setSelectedKey(state, folderId); selectionModel.setSelectedKey(state, folderId);
@ -761,18 +780,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Category root = CMS final Category root = CMS
.getContext() .getContext()
.getContentSection() .getContentSection()
.getRootAssetsFolder(); .getRootAssetsFolder();
if (!root.equals(folderRequestLocal.getFolder(state))) { if (!root.equals(folderRequestLocal.getFolder(state))) {
// Expand the ancestor nodes of the currently // Expand the ancestor nodes of the currently
// selected node. // selected node.
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderTreeModelController controller = cdiUtil.findBean( final FolderTreeModelController controller = cdiUtil.findBean(
FolderTreeModelController.class); FolderTreeModelController.class);
final List<Long> ancestorIds = controller.findAncestorIds( final List<Long> ancestorIds = controller.findAncestorIds(
folderRequestLocal.getFolder(state)); folderRequestLocal.getFolder(state));
ancestorIds.forEach(id -> tree.expand(id.toString(), state)); ancestorIds.forEach(id -> tree.expand(id.toString(), state));
} }
@ -794,8 +813,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
protected Long getRootFolderID(final PageState state) { protected Long getRootFolderID(final PageState state) {
final ContentSection section = CMS final ContentSection section = CMS
.getContext() .getContext()
.getContentSection(); .getContentSection();
return section.getRootAssetsFolder().getObjectId(); return section.getRootAssetsFolder().getObjectId();
} }
@ -813,37 +832,37 @@ public class AssetPane extends LayoutPanel implements Resettable {
final Label label = (Label) event.getTarget(); final Label label = (Label) event.getTarget();
final int numberOfItems = getSources(state).length; final int numberOfItems = getSources(state).length;
final Category folder = (Category) folderSelectionModel final Category folder = (Category) folderSelectionModel
.getSelectedObject(state); .getSelectedObject(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final CategoryManager categoryManager = cdiUtil final CategoryManager categoryManager = cdiUtil
.findBean(CategoryManager.class); .findBean(CategoryManager.class);
final String targetFolderPath; final String targetFolderPath;
if (targetFolderModel.getSelectedObject(state) == null) { if (targetFolderModel.getSelectedObject(state) == null) {
targetFolderPath = ""; targetFolderPath = "";
} else { } else {
targetFolderPath = categoryManager.getCategoryPath( targetFolderPath = categoryManager.getCategoryPath(
targetFolderModel.getSelectedObject(state)); targetFolderModel.getSelectedObject(state));
} }
if (isMove(state)) { if (isMove(state)) {
label.setLabel(new GlobalizedMessage( label.setLabel(new GlobalizedMessage(
"cms.ui.folder.move", "cms.ui.folder.move",
CmsConstants.CMS_FOLDER_BUNDLE, CmsConstants.CMS_FOLDER_BUNDLE,
new Object[]{ new Object[]{
numberOfItems, numberOfItems,
categoryManager.getCategoryPath(folder), categoryManager.getCategoryPath(folder),
targetFolderPath targetFolderPath
})); }));
} else if (isCopy(state)) { } else if (isCopy(state)) {
label.setLabel(new GlobalizedMessage( label.setLabel(new GlobalizedMessage(
"cms.ui.folder.copy", "cms.ui.folder.copy",
CMS_BUNDLE, CMS_BUNDLE,
new Object[]{ new Object[]{
numberOfItems, numberOfItems,
categoryManager.getCategoryPath(folder), categoryManager.getCategoryPath(folder),
targetFolderPath targetFolderPath
})); }));
} }
} }
@ -872,18 +891,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (folder != null) { if (folder != null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderManager folderManager = cdiUtil.findBean( final FolderManager folderManager = cdiUtil.findBean(
FolderManager.class); FolderManager.class);
if (!folderManager.getParentFolder(folder).isPresent()) { if (!folderManager.getParentFolder(folder).isPresent()) {
folderTree.expand(Long.toString(folder.getObjectId()), folderTree.expand(Long.toString(folder.getObjectId()),
state); state);
} else { } else {
final List<Folder> parents = folderManager final List<Folder> parents = folderManager
.getParentFolders(folder); .getParentFolders(folder);
parents parents
.stream() .stream()
.map(parent -> Long.toString(parent.getObjectId())) .map(parent -> Long.toString(parent.getObjectId()))
.forEach(folderId -> folderTree.expand(folderId, .forEach(folderId -> folderTree.expand(folderId,
state)); state));
} }
} }
} }
@ -908,7 +927,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
private class FolderTreeCellRenderer implements TreeCellRenderer { private class FolderTreeCellRenderer implements TreeCellRenderer {
private final RequestLocal invalidFoldersRequestLocal private final RequestLocal invalidFoldersRequestLocal
= new RequestLocal(); = new RequestLocal();
/** /**
* Render the folders appropriately. The selected folder is a bold * Render the folders appropriately. The selected folder is a bold
@ -932,18 +951,18 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (invalidFoldersRequestLocal.get(state) == null) { if (invalidFoldersRequestLocal.get(state) == null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssetFolderBrowserController controller = cdiUtil final AssetFolderBrowserController controller = cdiUtil
.findBean(AssetFolderBrowserController.class); .findBean(AssetFolderBrowserController.class);
invalidFolders = controller.createInvalidTargetsList( invalidFolders = controller.createInvalidTargetsList(
Arrays.asList(getSources(state))); Arrays.asList(getSources(state)));
invalidFoldersRequestLocal.set(state, invalidFolders); invalidFoldersRequestLocal.set(state, invalidFolders);
} else { } else {
invalidFolders = (List<String>) invalidFoldersRequestLocal invalidFolders = (List<String>) invalidFoldersRequestLocal
.get(state); .get(state);
} }
final Label label = new Label(value.toString()); final Label label = new Label(value.toString());
if (invalidFolders.contains(String.format( if (invalidFolders.contains(String.format(
FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) { FOLDER_BROWSER_KEY_PREFIX_FOLDER + "%s", key))) {
return label; return label;
} }
@ -959,11 +978,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
} }
private class TargetSelectorValidationListener private class TargetSelectorValidationListener
implements FormValidationListener { implements FormValidationListener {
@Override @Override
public void validate(final FormSectionEvent event) public void validate(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -975,24 +994,24 @@ public class AssetPane extends LayoutPanel implements Resettable {
final FormData data = event.getFormData(); final FormData data = event.getFormData();
if (target == null) { if (target == null) {
data.addError(new GlobalizedMessage( data.addError(new GlobalizedMessage(
"cms.ui.folder.need_select_target_folder", "cms.ui.folder.need_select_target_folder",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
//If the target is null, we can skip the rest of the checks //If the target is null, we can skip the rest of the checks
return; return;
} }
if (target.equals(folderSelectionModel.getSelectedObject(state))) { if (target.equals(folderSelectionModel.getSelectedObject(state))) {
data.addError(new GlobalizedMessage( data.addError(new GlobalizedMessage(
"cms.ui.folder.not_within_same_folder", "cms.ui.folder.not_within_same_folder",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
} }
// check create item permission // check create item permission
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final PermissionChecker permissionChecker = cdiUtil.findBean( final PermissionChecker permissionChecker = cdiUtil.findBean(
PermissionChecker.class); PermissionChecker.class);
if (!permissionChecker.isPermitted( if (!permissionChecker.isPermitted(
ItemPrivileges.CREATE_NEW, target)) { ItemPrivileges.CREATE_NEW, target)) {
data.addError("cms.ui.folder.no_permission_for_item", data.addError("cms.ui.folder.no_permission_for_item",
CmsConstants.CMS_FOLDER_BUNDLE); CmsConstants.CMS_FOLDER_BUNDLE);
} }
@ -1013,34 +1032,34 @@ public class AssetPane extends LayoutPanel implements Resettable {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderRepository folderRepo = cdiUtil final FolderRepository folderRepo = cdiUtil
.findBean(FolderRepository.class); .findBean(FolderRepository.class);
final AssetRepository assetRepo = cdiUtil final AssetRepository assetRepo = cdiUtil
.findBean(AssetRepository.class); .findBean(AssetRepository.class);
final AssetManager assetManager = cdiUtil final AssetManager assetManager = cdiUtil
.findBean(AssetManager.class); .findBean(AssetManager.class);
final AssetFolderBrowserController controller = cdiUtil final AssetFolderBrowserController controller = cdiUtil
.findBean(AssetFolderBrowserController.class); .findBean(AssetFolderBrowserController.class);
final FolderManager folderManager = cdiUtil final FolderManager folderManager = cdiUtil
.findBean(FolderManager.class); .findBean(FolderManager.class);
final PermissionChecker permissionChecker = cdiUtil.findBean( final PermissionChecker permissionChecker = cdiUtil.findBean(
PermissionChecker.class); PermissionChecker.class);
final CcmObject object; final CcmObject object;
final String name; final String name;
if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) { if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
final long folderId = Long.parseLong(objectId.substring( 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( final Folder folder = folderRepo.findById(folderId).orElseThrow(
() -> new IllegalArgumentException(String.format( () -> new IllegalArgumentException(String.format(
"No folder with id %d in database.", folderId))); "No folder with id %d in database.", folderId)));
name = folder.getName(); name = folder.getName();
//Check if folder or subfolder contains in use assets //Check if folder or subfolder contains in use assets
if (isMove(state)) { if (isMove(state)) {
final FolderManager.FolderIsMovable movable = folderManager final FolderManager.FolderIsMovable movable = folderManager
.folderIsMovable(folder, target); .folderIsMovable(folder, target);
switch (movable) { switch (movable) {
case DIFFERENT_SECTIONS: case DIFFERENT_SECTIONS:
addErrorMessage(data, addErrorMessage(data,
@ -1072,23 +1091,23 @@ public class AssetPane extends LayoutPanel implements Resettable {
break; break;
default: default:
throw new UnexpectedErrorException(String.format( throw new UnexpectedErrorException(String.format(
"Unknown state '%s' for '%s'.", "Unknown state '%s' for '%s'.",
movable, movable,
FolderManager.FolderIsMovable.class. FolderManager.FolderIsMovable.class.
getName())); getName()));
} }
} }
object = folder; object = folder;
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) { } else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
final long assetId = Long.parseLong(objectId.substring( final long assetId = Long.parseLong(objectId.substring(
FOLDER_BROWSER_KEY_PREFIX_ASSET.length())); FOLDER_BROWSER_KEY_PREFIX_ASSET.length()));
final Asset asset = assetRepo final Asset asset = assetRepo
.findById(assetId) .findById(assetId)
.orElseThrow(() -> new IllegalArgumentException( .orElseThrow(() -> new IllegalArgumentException(
String.format( String.format(
"No asset with id %d in the database.", "No asset with id %d in the database.",
assetId))); assetId)));
name = asset.getDisplayName(); name = asset.getDisplayName();
@ -1099,11 +1118,11 @@ public class AssetPane extends LayoutPanel implements Resettable {
object = asset; object = asset;
} else { } else {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"Provided objectId '%s' does not start with '%s' " "Provided objectId '%s' does not start with '%s' "
+ "or '%s'.", + "or '%s'.",
objectId, objectId,
FOLDER_BROWSER_KEY_PREFIX_FOLDER, FOLDER_BROWSER_KEY_PREFIX_FOLDER,
FOLDER_BROWSER_KEY_PREFIX_ASSET)); FOLDER_BROWSER_KEY_PREFIX_ASSET));
} }
final long count = controller.countObjects(target, name); final long count = controller.countObjects(target, name);
@ -1115,7 +1134,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (!(permissionChecker.isPermitted( if (!(permissionChecker.isPermitted(
ItemPrivileges.DELETE, object)) ItemPrivileges.DELETE, object))
&& isMove(state)) { && isMove(state)) {
addErrorMessage(data, addErrorMessage(data,
"cms.ui.folder.no_permission_for_item", "cms.ui.folder.no_permission_for_item",
object.getDisplayName()); object.getDisplayName());
@ -1142,8 +1161,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
@Override @Override
protected Folder getRootFolder(final PageState state) { protected Folder getRootFolder(final PageState state) {
final ContentSection section = CMS final ContentSection section = CMS
.getContext() .getContext()
.getContentSection(); .getContentSection();
return section.getRootAssetsFolder(); return section.getRootAssetsFolder();
} }
@ -1157,9 +1176,9 @@ public class AssetPane extends LayoutPanel implements Resettable {
if (key instanceof String) { if (key instanceof String) {
final Long keyAsLong; final Long keyAsLong;
if (((String) key).startsWith( if (((String) key).startsWith(
FOLDER_BROWSER_KEY_PREFIX_FOLDER)) { FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
keyAsLong = Long.parseLong(((String) key).substring( keyAsLong = Long.parseLong(((String) key).substring(
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length())); FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
} else { } else {
keyAsLong = Long.parseLong((String) key); keyAsLong = Long.parseLong((String) key);
} }

View File

@ -22,18 +22,14 @@ import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.form.TextArea; import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.cms.ui.assets.AssetForm; import com.arsdigita.cms.ui.assets.AssetForm;
import com.arsdigita.cms.ui.assets.AssetPane; import com.arsdigita.cms.ui.assets.AssetPane;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.assets.Bookmark;
import org.librecms.assets.LegalMetadata; import org.librecms.assets.LegalMetadata;
import org.librecms.contentsection.Asset; import org.librecms.contentsection.Asset;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;

View File

@ -249,6 +249,15 @@ cms.ui.folder.no_assets=No assets
cms.ui.assets.new=Create new asset cms.ui.assets.new=Create new asset
cms.ui.assets.new.create=Create asset cms.ui.assets.new.create=Create asset
cms.ui.asset.title=Title cms.ui.asset.title=Title
cms.ui.admin.assets.create=Create new asset cms.ui.admin.assets.create=Create new asset of type '{0}'
cms.ui.assets.bookmark.description=Description cms.ui.assets.bookmark.description=Description
cms.ui.assets.bookmark.url=URL cms.ui.assets.bookmark.url=URL
cms.ui.assets.bookmark.url.malformed=The provided URL is malformed.
cms.ui.assets.legalmetadata.rightsholder=Rights holder
cms.ui.assets.legalmetadata.rights=Rights
cms.ui.assets.legalmetadata.publisher=Publisher
cms.ui.assets.legalmetadata.creator=Creator
cms.ui.asset.show_locale=Show data for language
cms.ui.asset.initial_locale=Language
cms.ui.asset.add_locale=Add data for language
cms.ui.admin.assets.edit=Edit asset

View File

@ -248,6 +248,15 @@ cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden
cms.ui.assets.new=Neues Asset anlegen cms.ui.assets.new=Neues Asset anlegen
cms.ui.assets.new.create=Asset anlegen cms.ui.assets.new.create=Asset anlegen
cms.ui.asset.title=Titel cms.ui.asset.title=Titel
cms.ui.admin.assets.create=Neues Asset anlegen cms.ui.admin.assets.create=Neues Asset vom Typ '{0}' anlegen
cms.ui.assets.bookmark.description=Beschreibung cms.ui.assets.bookmark.description=Beschreibung
cms.ui.assets.bookmark.url=URL cms.ui.assets.bookmark.url=URL
cms.ui.assets.bookmark.url.malformed=Die angegebene URL ist nicht wohlgeformt.
cms.ui.assets.legalmetadata.rightsholder=Rechteinhaber
cms.ui.assets.legalmetadata.rights=Rechte
cms.ui.assets.legalmetadata.publisher=Publisher
cms.ui.assets.legalmetadata.creator=K\u00fcnstler
cms.ui.asset.show_locale=Zeige Daten f\u00fcr Sprache
cms.ui.asset.initial_locale=Sprache
cms.ui.asset.add_locale=Daten f\u00fcr folgende Sprache hinzuf\u00fcgen
cms.ui.admin.assets.edit=Asset bearbeiten

View File

@ -207,6 +207,15 @@ cms.ui.folder.no_assets=No assets
cms.ui.assets.new=Create new asset cms.ui.assets.new=Create new asset
cms.ui.assets.new.create=Create asset cms.ui.assets.new.create=Create asset
cms.ui.asset.title=Title cms.ui.asset.title=Title
cms.ui.admin.assets.create=Create new asset cms.ui.admin.assets.create=Create new asset of type '{0}'
cms.ui.assets.bookmark.description=Description cms.ui.assets.bookmark.description=Description
cms.ui.assets.bookmark.url=URL cms.ui.assets.bookmark.url=URL
cms.ui.assets.bookmark.url.malformed=The provided URL is malformed.
cms.ui.assets.legalmetadata.rightsholder=Right holder
cms.ui.assets.legalmetadata.rights=Rights
cms.ui.assets.legalmetadata.publisher=Publisher
cms.ui.assets.legalmetadata.creator=Creator
cms.ui.asset.show_locale=Show data for language
cms.ui.asset.initial_locale=Language
cms.ui.asset.add_locale=Add data for language
cms.ui.admin.assets.edit=Edit asset