CCM NG/ccm-cms: AssetPane, creation of assets.

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4662 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
jensp 2017-04-06 13:09:58 +00:00
parent bad95d0fac
commit e4dee4c756
15 changed files with 592 additions and 419 deletions

View File

@ -22,7 +22,10 @@
<Logger name="org.hibernate.type.descriptor.sql" <Logger name="org.hibernate.type.descriptor.sql"
level="trace"> level="trace">
</Logger>--> </Logger>-->
<Logger name="com.arsdigita.cms.ui.assets.AssetFolderBrowserController"
level="debug">
</Logger>
<Logger name="com.arsdigita.cms.ui.folder.FolderBrowserTableModelBuilder" <Logger name="com.arsdigita.cms.ui.folder.FolderBrowserTableModelBuilder"
level="debug"> level="debug">
</Logger> </Logger>

View File

@ -26,6 +26,7 @@ import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator; import com.arsdigita.bebop.Paginator;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.Text; import com.arsdigita.bebop.Text;
import com.arsdigita.bebop.event.TableActionAdapter; import com.arsdigita.bebop.event.TableActionAdapter;
@ -64,7 +65,7 @@ public class AssetFolderBrowser extends Table {
protected final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified"; protected final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified";
protected final static String SORT_KEY_CREATION_DATE = "creationDate"; protected final static String SORT_KEY_CREATION_DATE = "creationDate";
private final FolderSelectionModel folderSelectionModel; private final AssetPane assetPane;
private TableActionListener folderChanger; private TableActionListener folderChanger;
private TableActionListener folderDeleter; private TableActionListener folderDeleter;
private TableColumn nameColumn; private TableColumn nameColumn;
@ -77,12 +78,12 @@ public class AssetFolderBrowser extends Table {
private Paginator paginator; private Paginator paginator;
private long folderSize; private long folderSize;
public AssetFolderBrowser(final FolderSelectionModel folderSelectionModel) { public AssetFolderBrowser(final AssetPane assetPane) {
super(); super();
sortTypeParameter.setDefaultValue(SORT_KEY_NAME); sortTypeParameter.setDefaultValue(SORT_KEY_NAME);
sortDirectionParameter.setDefaultValue(SORT_ACTION_UP); sortDirectionParameter.setDefaultValue(SORT_ACTION_UP);
this.folderSelectionModel = folderSelectionModel; this.assetPane = assetPane;
initComponents(); initComponents();
} }
@ -111,7 +112,6 @@ public class AssetFolderBrowser extends Table {
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));
@ -142,14 +142,19 @@ public class AssetFolderBrowser extends Table {
super.register(page); super.register(page);
page.addComponentStateParam(this, folderSelectionModel. page.addComponentStateParam(
getStateParameter()); this,
getFolderSelectionModel().getStateParameter());
page.addComponentStateParam(this, sortTypeParameter); page.addComponentStateParam(this, sortTypeParameter);
page.addComponentStateParam(this, sortDirectionParameter); page.addComponentStateParam(this, sortDirectionParameter);
} }
protected FolderSelectionModel getFolderSelectionModel() { protected FolderSelectionModel getFolderSelectionModel() {
return folderSelectionModel; return assetPane.getFolderSelectionModel();
}
protected SingleSelectionModel<Long> getSelectedAssetModel() {
return assetPane.getSelectedAssetModel();
} }
protected Paginator getPaginator() { protected Paginator getPaginator() {
@ -288,13 +293,14 @@ public class AssetFolderBrowser extends Table {
row, row,
column); column);
} else { } else {
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,
// name, // name,
// section, // section,
// "DRAFT")); // "DRAFT"));
return new Text(name);
} }
} }
@ -387,9 +393,16 @@ public class AssetFolderBrowser extends Table {
} }
clearSelection(state); clearSelection(state);
getFolderSelectionModel().setSelectedKey( final String rowKey = (String) event.getRowKey();
state, if (rowKey.startsWith(CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
getObjectId(event.getRowKey())); getFolderSelectionModel().setSelectedKey(state,
getObjectId(rowKey));
} else if (rowKey.startsWith(
CmsConstants.FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
getSelectedAssetModel().setSelectedKey(state,
getObjectId(rowKey));
assetPane.editAssetMode(state);
}
} }
} }

View File

@ -58,6 +58,8 @@ import org.librecms.contentsection.FolderRepository;
import java.util.Collections; import java.util.Collections;
import java.util.Optional; import java.util.Optional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import static org.librecms.CmsConstants.*; import static org.librecms.CmsConstants.*;
@ -68,6 +70,9 @@ import static org.librecms.CmsConstants.*;
@RequestScoped @RequestScoped
public class AssetFolderBrowserController { public class AssetFolderBrowserController {
private static final Logger LOGGER = LogManager
.getLogger(AssetFolderBrowserController.class);
@Inject @Inject
private EntityManager entityManager; private EntityManager entityManager;
@ -217,7 +222,7 @@ public class AssetFolderBrowserController {
} else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) { } else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ASSET)) {
copyAsset(targetFolder, copyAsset(targetFolder,
Long.parseLong(objectId.substring( Long.parseLong(objectId.substring(
FOLDER_BROWSER_KEY_PREFIX_ITEM.length()))); FOLDER_BROWSER_KEY_PREFIX_ASSET.length())));
} else { } else {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"ID '%s' does not start with '%s' or '%s'.", "ID '%s' does not start with '%s' or '%s'.",
@ -440,7 +445,7 @@ public class AssetFolderBrowserController {
.ifPresent(assetRepo::delete); .ifPresent(assetRepo::delete);
} else { } else {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"The objectId is expected to start with 'folder-' or 'item.'."); "The objectId is expected to start with 'folder-' or 'asset-'.");
} }
} }
@ -517,9 +522,11 @@ public class AssetFolderBrowserController {
.createQuery( .createQuery(
criteria.where( criteria.where(
builder.and( builder.and(
builder.equal(from.get("parentCategory"), builder.
equal(from.get("parentCategory"),
folder), folder),
builder.like(builder.lower(from.get("name")), builder.like(builder.lower(from.get(
"name")),
filterTerm) filterTerm)
) )
) )
@ -573,6 +580,20 @@ public class AssetFolderBrowserController {
order = builder.asc(orderPath); 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<Asset> query = entityManager final TypedQuery<Asset> query = entityManager
.createQuery( .createQuery(
criteria.select(fromAsset) criteria.select(fromAsset)
@ -582,7 +603,8 @@ public class AssetFolderBrowserController {
"category"), folder), "category"), folder),
builder.equal(join.get("type"), builder.equal(join.get("type"),
CmsConstants.CATEGORIZATION_TYPE_FOLDER), CmsConstants.CATEGORIZATION_TYPE_FOLDER),
builder.like(builder.lower(fromAsset.get( builder.like(builder.lower(
fromAsset.get(
"displayName")), "displayName")),
filterTerm) filterTerm)
) )

View File

@ -96,7 +96,7 @@ class AssetFolderBrowserTableModel implements TableModel {
if (currentRow.isFolder()) { if (currentRow.isFolder()) {
return String.format("folder-%d", currentRow.getObjectId()); return String.format("folder-%d", currentRow.getObjectId());
} else { } else {
return String.format("item-%d", currentRow.getObjectId()); return String.format("asset-%d", currentRow.getObjectId());
} }
// return currentRow.getObjectId(); // return currentRow.getObjectId();

View File

@ -50,9 +50,9 @@ class AssetFolderBrowserTableModelBuilder
final PageState state) { final PageState state) {
if (!(table instanceof AssetFolderBrowser)) { if (!(table instanceof AssetFolderBrowser)) {
throw new IllegalArgumentException("The " throw new IllegalArgumentException(
+ "AssetFolderBrowserTableModelBuilder can only be used for the " "The AssetFolderBrowserTableModelBuilder can only be used "
+ "AssetFolderBrowser."); + "for the AssetFolderBrowser.");
} }
final AssetFolderBrowser assetFolderBrowser = (AssetFolderBrowser) table; final AssetFolderBrowser assetFolderBrowser = (AssetFolderBrowser) table;

View File

@ -39,6 +39,9 @@ import org.librecms.contentsection.Asset;
import org.librecms.contentsection.AssetRepository; import org.librecms.contentsection.AssetRepository;
import java.util.Optional; 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(); saveCancelSection = new SaveCancelSection();
add(saveCancelSection); add(saveCancelSection);
addInitListener(this);
addProcessListener(this);
addSubmissionListener(this);
} }
protected void addWidgets() { protected void addWidgets() {
@ -95,7 +102,8 @@ public abstract class AssetForm extends Form implements FormInitListener,
AssetRepository.class); AssetRepository.class);
final Asset asset = assetRepo final Asset asset = assetRepo
.findById(selectionModel.getSelectedKey(state)) .findById(selectionModel.getSelectedKey(state))
.orElseThrow(() -> new IllegalArgumentException(String.format( .orElseThrow(() -> new IllegalArgumentException(String.
format(
"No asset with ID %d in the database.", "No asset with ID %d in the database.",
selectionModel.getSelectedKey(state)))); selectionModel.getSelectedKey(state))));
return Optional.of(asset); return Optional.of(asset);
@ -145,6 +153,25 @@ public abstract class AssetForm extends Form implements FormInitListener,
final AssetRepository assetRepo = cdiUtil final AssetRepository assetRepo = cdiUtil
.findBean(AssetRepository.class); .findBean(AssetRepository.class);
assetRepo.save(asset); 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);
} }
} }

View File

@ -26,6 +26,7 @@ import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.MetaForm;
import com.arsdigita.bebop.Page; import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Paginator; import com.arsdigita.bebop.Paginator;
@ -69,6 +70,7 @@ import com.arsdigita.cms.ui.folder.FolderTreeModelController;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.LayoutPanel; import com.arsdigita.toolbox.ui.LayoutPanel;
import java.lang.reflect.InvocationTargetException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -98,6 +100,7 @@ import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.TooManyListenersException; import java.util.TooManyListenersException;
import java.util.logging.Level;
import static org.librecms.CmsConstants.*; import static org.librecms.CmsConstants.*;
@ -124,6 +127,8 @@ public class AssetPane extends LayoutPanel implements Resettable {
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(
"selected_asset_type");
private AssetFolderBrowser folderBrowser; private AssetFolderBrowser folderBrowser;
private Form browserForm; private Form browserForm;
@ -136,7 +141,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
private SegmentedPanel.Segment actionsSegment; private SegmentedPanel.Segment actionsSegment;
private SegmentedPanel.Segment newFolderSegment; private SegmentedPanel.Segment newFolderSegment;
private SegmentedPanel.Segment editFolderSegment; private SegmentedPanel.Segment editFolderSegment;
private SegmentedPanel.Segment editAssetSegement; private SegmentedPanel.Segment editAssetSegment;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public AssetPane() { public AssetPane() {
@ -189,7 +194,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
browserForm = new Form("assetFolderBrowser", browserForm = new Form("assetFolderBrowser",
new BoxPanel(BoxPanel.VERTICAL)); new BoxPanel(BoxPanel.VERTICAL));
browserForm.setMethod(Form.GET); browserForm.setMethod(Form.GET);
folderBrowser = new AssetFolderBrowser(folderSelectionModel); 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());
@ -453,7 +458,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
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(
"new-asset-type-select"); selectedAssetTypeParam);
try { try {
newAssetTypeSelect.addPrintListener(new PrintListener() { newAssetTypeSelect.addPrintListener(new PrintListener() {
@ -463,6 +468,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
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();
for (final AssetTypeInfo type : typesManager for (final AssetTypeInfo type : typesManager
.getAvailableAssetTypes()) { .getAvailableAssetTypes()) {
final String labelKey = type.getLabelKey(); final String labelKey = type.getLabelKey();
@ -488,14 +494,88 @@ 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 {
editAssetMode(event.getPageState());
//Nothing yet
} }
}); });
actionsSegment.add(newAssetForm); 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; return panel;
} }
@ -509,6 +589,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, true); actionsSegment.setVisible(state, true);
newFolderSegment.setVisible(state, false); newFolderSegment.setVisible(state, false);
editFolderSegment.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); newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false);
targetSelector.expose(state); targetSelector.expose(state);
editAssetSegment.setVisible(state, false);
} }
protected void newFolderMode(final PageState state) { protected void newFolderMode(final PageState state) {
@ -533,6 +615,7 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, false); actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, true); newFolderSegment.setVisible(state, true);
editFolderSegment.setVisible(state, false); editFolderSegment.setVisible(state, false);
editAssetSegment.setVisible(state, false);
} }
protected void editFolderMode(final PageState state) { protected void editFolderMode(final PageState state) {
@ -542,6 +625,17 @@ public class AssetPane extends LayoutPanel implements Resettable {
actionsSegment.setVisible(state, false); actionsSegment.setVisible(state, false);
newFolderSegment.setVisible(state, false); newFolderSegment.setVisible(state, false);
editFolderSegment.setVisible(state, true); 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 @Override
@ -560,9 +654,13 @@ public class AssetPane extends LayoutPanel implements Resettable {
page.setVisibleDefault(actionsSegment, true); page.setVisibleDefault(actionsSegment, true);
page.setVisibleDefault(newFolderSegment, false); page.setVisibleDefault(newFolderSegment, false);
page.setVisibleDefault(editFolderSegment, false); page.setVisibleDefault(editFolderSegment, false);
page.setVisibleDefault(editAssetSegment, false);
page.addComponentStateParam(this, actionParameter); page.addComponentStateParam(this, actionParameter);
page.addComponentStateParam(this, sourcesParameter); page.addComponentStateParam(this, sourcesParameter);
page.addComponentStateParam(this, selectedAssetTypeParam);
page.addComponentStateParam(this,
selectedAssetModel.getStateParameter());
} }
@Override @Override
@ -581,6 +679,10 @@ public class AssetPane extends LayoutPanel implements Resettable {
return selectedAssetModel; return selectedAssetModel;
} }
protected FolderSelectionModel getFolderSelectionModel() {
return folderSelectionModel;
}
private String[] getSources(final PageState state) { private String[] getSources(final PageState state) {
final String[] result = (String[]) state.getValue(sourcesParameter); final String[] result = (String[]) state.getValue(sourcesParameter);

View File

@ -38,8 +38,6 @@ import org.librecms.contentsection.Asset;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Objects; import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* *
@ -103,13 +101,7 @@ public class BookmarkForm extends AssetForm {
.addValue(KernelConfig.getConfig().getDefaultLocale(), .addValue(KernelConfig.getConfig().getDefaultLocale(),
(String) description.getValue(state)); (String) description.getValue(state));
try { bookmark.setUrl((String) url.getValue(state));
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));
}
return bookmark; return bookmark;
} }
@ -136,14 +128,7 @@ public class BookmarkForm extends AssetForm {
.addValue(KernelConfig.getConfig().getDefaultLocale(), .addValue(KernelConfig.getConfig().getDefaultLocale(),
(String) description.getValue(state)); (String) description.getValue(state));
try { bookmark.setUrl((String) url.getValue(state));
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));
}
} }
} }

View File

@ -51,19 +51,28 @@ public class LegalMetadataForm extends AssetForm {
@Override @Override
protected void addWidgets() { protected void addWidgets() {
add(new Label(new GlobalizedMessage( add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.rightsholder", "cms.ui.assets.legalmetadata.rightsholder",
CmsConstants.CMS_BUNDLE))); CmsConstants.CMS_BUNDLE)));
rightsHolder = new TextArea("legalmetadata-rightsholder"); rightsHolder = new TextArea("legalmetadata-rightsholder");
add(rightsHolder); add(rightsHolder);
add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.rights",
CmsConstants.CMS_BUNDLE)));
rights = new TextArea("legalmetadata-rights"); rights = new TextArea("legalmetadata-rights");
add(rights); add(rights);
add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.publisher",
CmsConstants.CMS_BUNDLE)));
publisher = new TextArea("legalmetadata-rights"); publisher = new TextArea("legalmetadata-rights");
add(publisher); add(publisher);
add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.creator",
CmsConstants.CMS_BUNDLE)));
creator = new TextArea("legalmetadata-creator"); creator = new TextArea("legalmetadata-creator");
add(creator); add(creator);
} }

View File

@ -173,8 +173,7 @@ public class AssetTypesManager {
* @return A {@link AssetTypeInfo} object describing the asset type. * @return A {@link AssetTypeInfo} object describing the asset type.
* *
* @throws IllegalArgumentException If no class with the provided name * @throws IllegalArgumentException If no class with the provided name
* exists or the class is not a subclass of * exists or the class is not a subclass of {@link Asset}.
* {@link Asset}.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public AssetTypeInfo getAssetTypeInfo(final String assetTypeClass) { public AssetTypeInfo getAssetTypeInfo(final String assetTypeClass) {
@ -186,7 +185,7 @@ public class AssetTypesManager {
clazz = Class.forName(assetTypeClass); clazz = Class.forName(assetTypeClass);
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"There is not class \"%s\".", assetTypeClass), "There is no class \"%s\".", assetTypeClass),
ex); ex);
} }

View File

@ -73,7 +73,7 @@ public class Bookmark extends Asset implements Serializable {
@Column(name = "URL", length = 2048, nullable = false) @Column(name = "URL", length = 2048, nullable = false)
@NotEmpty @NotEmpty
private URL url; private String url;
public Bookmark() { public Bookmark() {
super(); super();
@ -88,11 +88,11 @@ public class Bookmark extends Asset implements Serializable {
this.description = description; this.description = description;
} }
public URL getUrl() { public String getUrl() {
return url; return url;
} }
public void setUrl(final URL url) { public void setUrl(final String url) {
this.url = url; this.url = url;
} }

View File

@ -98,6 +98,7 @@ public class AssetRepository
@RequiresPrivilege(AssetPrivileges.EDIT) @RequiresPrivilege(AssetPrivileges.EDIT)
final Asset asset) { final Asset asset) {
super.save(asset);
} }
/** /**

View File

@ -248,3 +248,7 @@ cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets 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.admin.assets.create=Create new asset
cms.ui.assets.bookmark.description=Description
cms.ui.assets.bookmark.url=URL

View File

@ -247,3 +247,7 @@ cms.ui.assets=Medien & Daten
cms.ui.folder.no_assets=Keine Medien oder Datens\u00e4tze vorhanden 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.admin.assets.create=Neues Asset anlegen
cms.ui.assets.bookmark.description=Beschreibung
cms.ui.assets.bookmark.url=URL

View File

@ -206,3 +206,7 @@ cms.ui.assets=Assets
cms.ui.folder.no_assets=No assets 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.admin.assets.create=Create new asset
cms.ui.assets.bookmark.description=Description
cms.ui.assets.bookmark.url=URL