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 b4cef2215..1d6389925 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
@@ -82,7 +82,7 @@ public abstract class AssetForm extends Form implements FormInitListener,
private SaveCancelSection saveCancelSection;
public AssetForm(final AssetPane assetPane) {
- super("asset-form", new ColumnPanel(2));
+ super("asset-form", new ColumnPanel(1));
this.assetPane = assetPane;
selectionModel = assetPane.getSelectedAssetModel();
@@ -164,7 +164,13 @@ public abstract class AssetForm extends Form implements FormInitListener,
}
showLocaleSubmit = new Submit(new GlobalizedMessage(
"cms.ui.asset.show_locale",
- CmsConstants.CMS_BUNDLE));
+ CmsConstants.CMS_BUNDLE)) {
+
+ @Override
+ public boolean isVisible(final PageState state) {
+ return getSelectedAsset(state).isPresent();
+ }
+ };
showLocalePanel.add(showLocaleLabel);
showLocalePanel.add(showLocaleSelect);
showLocalePanel.add(showLocaleSubmit);
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 4bcf5d2de..91b02599e 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
@@ -29,7 +29,6 @@ import com.arsdigita.bebop.form.TextField;
import com.arsdigita.cms.ui.assets.AssetForm;
import com.arsdigita.cms.ui.assets.AssetPane;
import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.kernel.KernelConfig;
import org.librecms.CmsConstants;
import org.librecms.assets.Bookmark;
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 b47b1be6b..3893bdd03 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
@@ -18,6 +18,7 @@
*/
package com.arsdigita.cms.ui.assets.forms;
+import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
@@ -51,29 +52,33 @@ public class LegalMetadataForm extends AssetForm {
@Override
protected void addWidgets() {
- add(new Label(new GlobalizedMessage(
+ final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
+
+ panel.add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.rightsholder",
CmsConstants.CMS_BUNDLE)));
rightsHolder = new TextArea("legalmetadata-rightsholder");
- add(rightsHolder);
+ panel.add(rightsHolder);
- add(new Label(new GlobalizedMessage(
+ panel.add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.rights",
CmsConstants.CMS_BUNDLE)));
rights = new TextArea("legalmetadata-rights");
- add(rights);
+ panel.add(rights);
- add(new Label(new GlobalizedMessage(
+ panel.add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.publisher",
CmsConstants.CMS_BUNDLE)));
publisher = new TextArea("legalmetadata-rights");
- add(publisher);
+ panel.add(publisher);
- add(new Label(new GlobalizedMessage(
+ panel.add(new Label(new GlobalizedMessage(
"cms.ui.assets.legalmetadata.creator",
CmsConstants.CMS_BUNDLE)));
creator = new TextArea("legalmetadata-creator");
- add(creator);
+ panel.add(creator);
+
+ add(panel);
}
@Override
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java
new file mode 100644
index 000000000..2944caf14
--- /dev/null
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2017 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package com.arsdigita.cms.ui.assets.forms;
+
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.form.TextArea;
+import com.arsdigita.cms.ui.assets.AssetForm;
+import com.arsdigita.cms.ui.assets.AssetPane;
+import com.arsdigita.globalization.GlobalizedMessage;
+import java.util.Objects;
+import java.util.Optional;
+import org.librecms.CmsConstants;
+import org.librecms.assets.SideNote;
+import org.librecms.contentsection.Asset;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SideNoteForm extends AssetForm {
+
+ private TextArea text;
+
+ public SideNoteForm(final AssetPane assetPane) {
+ super(assetPane);
+ }
+
+ @Override
+ protected void addWidgets() {
+
+ add(new Label(new GlobalizedMessage("cms.ui.assets.sidenote.text",
+ CmsConstants.CMS_BUNDLE)));
+ text = new TextArea("sidenote-text");
+ add(text);
+ }
+
+ @Override
+ protected void initForm(final PageState state,
+ final Optional selectedAsset) {
+
+ if (selectedAsset.isPresent()) {
+ if (!(selectedAsset.get() instanceof SideNote)) {
+ throw new IllegalArgumentException(String.format(
+ "The provided asset must be an instance of '%s' or"
+ + "an subclass but is an instance of '%s'",
+ SideNote.class.getName(),
+ selectedAsset.get().getClass().getName()));
+ }
+
+ final SideNote sideNote = (SideNote) selectedAsset.get();
+
+ text.setValue(state,
+ sideNote
+ .getText()
+ .getValue(getSelectedLocale(state)));
+ }
+
+ }
+
+ @Override
+ protected void showLocale(final PageState state) {
+
+ final Optional selectedAsset = getSelectedAsset(state);
+
+ if (selectedAsset.isPresent()) {
+ if (!(selectedAsset.get() instanceof SideNote)) {
+ throw new IllegalArgumentException(String.format(
+ "The provided asset must be an instance of '%s' or"
+ + "an subclass but is an instance of '%s'",
+ SideNote.class.getName(),
+ selectedAsset.get().getClass().getName()));
+ }
+
+ final SideNote sideNote = (SideNote) selectedAsset.get();
+
+ text.setValue(state,
+ sideNote
+ .getText()
+ .getValue(getSelectedLocale(state)));
+ }
+ }
+
+ @Override
+ protected Asset createAsset(final PageState state) throws
+ FormProcessException {
+
+ Objects.requireNonNull(state);
+
+ final SideNote sideNote = new SideNote();
+
+ sideNote
+ .getText()
+ .addValue(getSelectedLocale(state),
+ (String) text.getValue(state));
+
+ return sideNote;
+ }
+
+ @Override
+ protected void updateAsset(final Asset asset, final PageState state)
+ throws FormProcessException {
+
+ Objects.requireNonNull(asset);
+ Objects.requireNonNull(state);
+
+ if (!(asset instanceof SideNote)) {
+ throw new IllegalArgumentException(String.format(
+ "The provided asset must be an instance of '%s' or"
+ + "an subclass but is an instance of '%s'",
+ SideNote.class.getName(),
+ asset.getClass().getName()));
+ }
+
+ final SideNote sideNote = (SideNote) asset;
+
+ sideNote
+ .getText()
+ .addValue(getSelectedLocale(state),
+ (String) text.getValue(state));
+ }
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/Cms.java b/ccm-cms/src/main/java/org/librecms/Cms.java
index 260911a23..6c0b524fc 100644
--- a/ccm-cms/src/main/java/org/librecms/Cms.java
+++ b/ccm-cms/src/main/java/org/librecms/Cms.java
@@ -35,6 +35,7 @@ import org.librecms.contenttypes.News;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
+import org.librecms.assets.SideNote;
@Module(//packageName = "org.librecms.cms",
requiredModules = {
@@ -60,7 +61,7 @@ import java.util.Properties;
}
)
@ContentTypes({Article.class, Event.class, MultiPartArticle.class, News.class})
-@AssetTypes({Bookmark.class, LegalMetadata.class})
+@AssetTypes({Bookmark.class, LegalMetadata.class, SideNote.class})
public class Cms implements CcmModule {
private static final Logger LOGGER = LogManager.getLogger(Cms.class);
diff --git a/ccm-cms/src/main/java/org/librecms/assets/LegalMetadata.java b/ccm-cms/src/main/java/org/librecms/assets/LegalMetadata.java
index 261ac4b9e..9d202116b 100644
--- a/ccm-cms/src/main/java/org/librecms/assets/LegalMetadata.java
+++ b/ccm-cms/src/main/java/org/librecms/assets/LegalMetadata.java
@@ -99,6 +99,7 @@ public class LegalMetadata extends Asset implements Serializable {
public LegalMetadata() {
super();
+ rights = new LocalizedString();
contributors = new ArrayList<>();
}
diff --git a/ccm-cms/src/main/java/org/librecms/assets/SideNote.java b/ccm-cms/src/main/java/org/librecms/assets/SideNote.java
index 148a04005..f7ba92bb9 100644
--- a/ccm-cms/src/main/java/org/librecms/assets/SideNote.java
+++ b/ccm-cms/src/main/java/org/librecms/assets/SideNote.java
@@ -18,6 +18,7 @@
*/
package org.librecms.assets;
+import com.arsdigita.cms.ui.assets.forms.SideNoteForm;
import org.librecms.contentsection.Asset;
import org.hibernate.envers.Audited;
import org.libreccm.l10n.LocalizedString;
@@ -33,6 +34,7 @@ import javax.persistence.JoinTable;
import javax.persistence.Table;
import static org.librecms.CmsConstants.*;
+import static org.librecms.assets.AssetConstants.*;
/**
* Assets for side notes (additional informations) for a content item.
@@ -42,6 +44,11 @@ import static org.librecms.CmsConstants.*;
@Entity
@Table(name = "SIDE_NOTES", schema = DB_SCHEMA)
@Audited
+@AssetType(assetForm = SideNoteForm.class,
+ labelBundle= ASSETS_BUNDLE,
+ labelKey = "sidenote.label",
+ descriptionBundle = ASSETS_BUNDLE,
+ descriptionKey = "sidenote.description")
public class SideNote extends Asset implements Serializable {
private static final long serialVersionUID = -4566222634780521726L;
diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
index 9294f987b..e15348214 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties
@@ -261,3 +261,4 @@ 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
+cms.ui.assets.sidenote.text=Text
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 a7a8418db..12062f2e8 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties
@@ -260,3 +260,4 @@ 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
+cms.ui.assets.sidenote.text=Text
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 5cc9e3dff..06c97ddb8 100644
--- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties
+++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties
@@ -219,3 +219,4 @@ 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
+cms.ui.assets.sidenote.text=Text
diff --git a/ccm-cms/src/main/resources/org/librecms/assets/Assets.properties b/ccm-cms/src/main/resources/org/librecms/assets/Assets.properties
index 4763ec1e3..03d5ccd24 100644
--- a/ccm-cms/src/main/resources/org/librecms/assets/Assets.properties
+++ b/ccm-cms/src/main/resources/org/librecms/assets/Assets.properties
@@ -3,3 +3,5 @@ bookmark.label=Bookmark
bookmark.description=Asset type to store URLs to external resources.
legal_metadata.label=Legal metadata
legal_metadata.description=Stores legal metadata like the informations about the creator of an image etc.
+sidenote.label=Side note
+sidenote.description=Additional information. Usually appears in the right or left column of an webpage.
diff --git a/ccm-cms/src/main/resources/org/librecms/assets/Assets_de.properties b/ccm-cms/src/main/resources/org/librecms/assets/Assets_de.properties
index d120e9769..c32b5530f 100644
--- a/ccm-cms/src/main/resources/org/librecms/assets/Assets_de.properties
+++ b/ccm-cms/src/main/resources/org/librecms/assets/Assets_de.properties
@@ -3,3 +3,5 @@ bookmark.label=Lesezeichen (URL)
bookmark.description=Dieser Asset-Typ dient zur Ablage von URLs zu externen Resourcen.
legal_metadata.label=Rechtliche Informationen
legal_metadata.description=Rechtliche Informationen, z.B. die Urheberschaft von Bildern etc.
+sidenote.label=Randbemerkung
+sidenote.description=Randbemerkung mit zus\u00e4tzlichen Informationen. Erscheint in der Regel in der rechten oder linken Spalte einer Webseite.