diff --git a/ccm-sci-assets-publicationsabout/application.xml b/ccm-sci-assets-publicationsabout/application.xml
new file mode 100644
index 000000000..41eccba4e
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/application.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This assets for the SciPublications allows it to define associatons between a publication and one or more other publications which are discussed by the publication.
+
+
+
diff --git a/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl b/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl
new file mode 100644
index 000000000..bcab40ea0
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl
@@ -0,0 +1,36 @@
+//
+// Copyright (C) 2014 Jens Pelzetter
+//
+// 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+//
+
+model com.arsdigita.cms.contentassets;
+
+import com.arsdigita.cms.contenttypes.PublicationBundle;
+import com.arsdigita.kernel.ACSObjects;
+
+association {
+
+ PublicationBundle[0..n] discussedBy = join ct_publication_bundles.bundle_id
+ to ca_publications_about.discussed_publication_id,
+ join ca_publications_about.discussing_publication_id
+ to ct_publication_bundles.bundle_id;
+
+ PublicationBundle[0..n] discusses = join ct_publication_bundles.bundle_id
+ to ca_publications_about.discussing_publication_id,
+ join ca_publications_about.discussed_publication_id
+ to ct_publication_bundles.bundle_id;
+}
\ No newline at end of file
diff --git a/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/oracle-se-create.sql b/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/oracle-se-create.sql
new file mode 100644
index 000000000..1dcc59ed8
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/oracle-se-create.sql
@@ -0,0 +1,2 @@
+@@ ddl/oracle-se/create.sql
+@@ ddl/oracle-se/deferred.sql
diff --git a/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/postgres-create.sql b/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/postgres-create.sql
new file mode 100644
index 000000000..614b9c240
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/sql/ccm-sci-assets-publicationsabout/postgres-create.sql
@@ -0,0 +1,4 @@
+begin;
+\i ddl/postgres/create.sql
+\i ddl/postgres/deferred.sql
+commit;
diff --git a/ccm-sci-assets-publicationsabout/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/SciPublicationsAbout.xml b/ccm-sci-assets-publicationsabout/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/SciPublicationsAbout.xml
new file mode 100644
index 000000000..4e45b1c44
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/SciPublicationsAbout.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ccm-sci-assets-publicationsabout/src/ccm-sci-assets-publicationsabout.load b/ccm-sci-assets-publicationsabout/src/ccm-sci-assets-publicationsabout.load
new file mode 100644
index 000000000..7ab5f9057
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/ccm-sci-assets-publicationsabout.load
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ccm-sci-assets-publicationsabout/src/ccm-sci-asssets-publicationsabout.config b/ccm-sci-assets-publicationsabout/src/ccm-sci-asssets-publicationsabout.config
new file mode 100644
index 000000000..87ab51a7b
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/ccm-sci-asssets-publicationsabout.config
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/PublicationCollection.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/PublicationCollection.java
new file mode 100644
index 000000000..52a45704f
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/PublicationCollection.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets;
+
+import com.arsdigita.cms.ContentBundle;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.domain.DomainCollection;
+import com.arsdigita.domain.DomainObjectFactory;
+import com.arsdigita.persistence.DataCollection;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class PublicationCollection extends DomainCollection {
+
+ public PublicationCollection(final DataCollection dataCollection) {
+ super(dataCollection);
+
+ m_dataCollection.addOrder("name");
+ }
+
+ public Publication getPublication() {
+
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(
+ m_dataCollection.getDataObject());
+
+ return (Publication) bundle.getPrimaryInstance();
+ }
+
+ public Publication getPublication(final String language) {
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(
+ m_dataCollection.getDataObject()
+ );
+
+ return (Publication) bundle.getInstance(language);
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutGlobalizationUtil.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutGlobalizationUtil.java
new file mode 100644
index 000000000..e614b31ac
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutGlobalizationUtil.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets;
+
+import com.arsdigita.globalization.GlobalizedMessage;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutGlobalizationUtil {
+
+ private SciPublicationsAboutGlobalizationUtil() {
+ //Nothing
+ }
+
+ public static final String BUNDLE_NAME = "com.arsdigita.cms.contentassets.SciPublicationsAboutResources";
+
+ public static GlobalizedMessage globalize(final String key) {
+ return new GlobalizedMessage(key, BUNDLE_NAME);
+ }
+
+ public static GlobalizedMessage globalize(final String key, final Object[] args) {
+ return new GlobalizedMessage(key, BUNDLE_NAME, args);
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java
new file mode 100644
index 000000000..e86ccdbb1
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2013 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets;
+
+import com.arsdigita.cms.contentassets.ui.SciPublicationsAboutDiscussesStep;
+import com.arsdigita.cms.contentassets.ui.SciPublicationsAboutDiscussingStep;
+import com.arsdigita.cms.contenttypes.ContentItemTraversalAdapter;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.db.DbHelper;
+import com.arsdigita.domain.DomainObjectTraversalAdapter;
+import com.arsdigita.domain.xml.TraversalHandler;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.persistence.pdl.ManifestSource;
+import com.arsdigita.persistence.pdl.NameFilter;
+import com.arsdigita.runtime.CompoundInitializer;
+import com.arsdigita.runtime.DomainInitEvent;
+import com.arsdigita.runtime.PDLInitializer;
+import com.arsdigita.runtime.RuntimeConfig;
+import com.arsdigita.xml.XML;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutInitializer extends CompoundInitializer {
+
+ public SciPublicationsAboutInitializer() {
+ final String url = RuntimeConfig.getConfig().getJDBCURL();
+ final int database = DbHelper.getDatabaseFromURL(url);
+
+ add(new PDLInitializer(new ManifestSource(
+ "ccm-sci-assets-publicationsabout.pdl.mf",
+ new NameFilter(DbHelper.getDatabaseSuffix(database), "pdl"))));
+ }
+
+ @Override
+ public void init(final DomainInitEvent event) {
+
+ super.init(event);
+
+ final String traversal = "/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/"
+ + "SciPublicationsAbout.xml";
+ XML.parseResource(traversal, new TraversalHandler() {
+
+ @Override
+ protected void registerAdapter(final String objectType,
+ final DomainObjectTraversalAdapter adapter,
+ final String context) {
+ ContentItemTraversalAdapter.registerAssetAdapter("discussedBy", adapter, context);
+ ContentItemTraversalAdapter.registerAssetAdapter("discusses", adapter, context);
+ }
+
+ });
+
+ AuthoringKitWizard.registerAssetStep(
+ Publication.BASE_DATA_OBJECT_TYPE,
+ SciPublicationsAboutDiscussesStep.class,
+ new GlobalizedMessage("com.arsdigita.cms.contentassets.about.discusses.label",
+ "com.arsdigita.cms.contentassets.SciPublicationsAboutResources"),
+ new GlobalizedMessage("com.arsdigita.cms.contentassets.about.discusses.desc",
+ "com.arsdigita.cms.contentassets.SciPublicationsAboutResources"),
+ 30);
+
+ AuthoringKitWizard.registerAssetStep(
+ Publication.BASE_DATA_OBJECT_TYPE,
+ SciPublicationsAboutDiscussingStep.class,
+ new GlobalizedMessage("com.arsdigita.cms.contentassets.about.discussing.label",
+ "com.arsdigita.cms.contentassets.SciPublicationsAboutResources"),
+ new GlobalizedMessage("com.arsdigita.cms.contentassets.about.discussing.desc",
+ "com.arsdigita.cms.contentassets.SciPublicationsAboutResources"),
+ 40);
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutLoader.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutLoader.java
new file mode 100644
index 000000000..3be8a1b2a
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutLoader.java
@@ -0,0 +1,37 @@
+
+/*
+ * Copyright (c) 2014 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets;
+
+import com.arsdigita.loader.PackageLoader;
+import com.arsdigita.runtime.ScriptContext;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutLoader extends PackageLoader {
+
+ @Override
+ public void run(final ScriptContext ctx) {
+ //Nothing
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources.properties b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources.properties
new file mode 100644
index 000000000..7eacf538b
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources.properties
@@ -0,0 +1,18 @@
+
+com.arsdigita.cms.contentassets.about.discusses.label=Discusses
+com.arsdigita.cms.contentassets.about.discussing.label=Discussed by
+com.arsdigita.cms.contentassets.about.discusses.add=Add a discussed publication
+com.arsdigita.cms.contentassets.about.discusses.none=No publications found
+com.arsdigita.cms.contentassets.about.discusses.publication=Publication
+com.arsdigita.cms.contentassets.about.discusses.publication.remove=Remove
+com.arsdigita.cms.contentassets.about.discusses.publication.remove.confirm=Are you sure to remove this publication?
+com.arsdigita.cms.contentassets.about.discusses.publication.none_selected=No publication selected
+com.arsdigita.cms.contentassets.about.discussing.add=Add a discussing publication
+com.arsdigita.cms.contentassets.about.discussing.none=No publications found
+com.arsdigita.cms.contentassets.about.discussing.publication=Publication
+com.arsdigita.cms.contentassets.about.discussing.publication.remove=Remove
+com.arsdigita.cms.contentassets.about.discussing.publication.remove.confirm=Are you sure to remove this publication?
+com.arsdigita.cms.contentassets.about.discusses.publication.select_discussing=Select discussing publication
+com.arsdigita.cms.contentassets.about.discussing.publication.none_selected=No publication selected
+com.arsdigita.cms.contentassets.about.discusses.publication.select_discussed=Selected discussed publication
+=
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources_de.properties b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources_de.properties
new file mode 100644
index 000000000..c8a1cd1e1
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutResources_de.properties
@@ -0,0 +1,18 @@
+
+com.arsdigita.cms.contentassets.about.discusses.label=Behandelt
+com.arsdigita.cms.contentassets.about.discussing.label=Wird behandelt in
+com.arsdigita.cms.contentassets.about.discusses.add=Behandelte Publikation hinzuf\u00fcgen
+com.arsdigita.cms.contentassets.about.discusses.none=Keine Publikationen gefunden
+com.arsdigita.cms.contentassets.about.discusses.publication=Publikation
+com.arsdigita.cms.contentassets.about.discusses.publication.remove=Entfernen
+com.arsdigita.cms.contentassets.about.discusses.publication.remove.confirm=Sind Sie sicher das Sie diese Publikation entfernen wollen?
+com.arsdigita.cms.contentassets.about.discusses.publication.none_selected=Keine Publikation ausgew\u00e4hlt
+com.arsdigita.cms.contentassets.about.discussing.add=Behandelende Publikation hinzuf\u00fcgen
+com.arsdigita.cms.contentassets.about.discussing.none=Keine Publikationen gefunden
+com.arsdigita.cms.contentassets.about.discussing.publication=Publikation
+com.arsdigita.cms.contentassets.about.discussing.publication.remove=Entfernen
+com.arsdigita.cms.contentassets.about.discussing.publication.remove.confirm=Sind Sie sicher das Sie diese Publikation entfernen wollen?
+com.arsdigita.cms.contentassets.about.discusses.publication.select_discussing=Behandelende Publikation ausw\u00e4hlen
+com.arsdigita.cms.contentassets.about.discussing.publication.none_selected=Keine Publikation ausgew\u00e4hlt
+com.arsdigita.cms.contentassets.about.discusses.publication.select_discussed=Behandelete Publikation ausw\u00e4hlen
+=
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java
new file mode 100644
index 000000000..5a1b1c8d1
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets;
+
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.contenttypes.PublicationBundle;
+import com.arsdigita.persistence.DataCollection;
+
+/**
+ * This class provides some convenient methods for dealing with the About asset/mixin.
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutService {
+
+ public static final String DISCUSSED_BY = "discussedBy";
+ public static final String DISCUSSING = "discusses";
+
+ /**
+ * Get all publications which are discussed by the provided publication.
+ *
+ * @param discussing
+ *
+ * @return
+ */
+ public PublicationCollection getDiscussedPublications(final Publication discussing) {
+ final PublicationBundle bundle = discussing.getPublicationBundle();
+
+ final DataCollection dataCollection = (DataCollection) bundle.get(DISCUSSING);
+
+ return new PublicationCollection(dataCollection);
+ }
+
+ /**
+ * Add a discussed publication.
+ *
+ * @param discussing The publications which is discussing the other publication.
+ * @param discussed The publication discussed by the other publication
+ */
+ public void addDiscussedPublication(final Publication discussing, final Publication discussed) {
+ final PublicationBundle discussingBundle = discussing.getPublicationBundle();
+ final PublicationBundle discussedBundle = discussed.getPublicationBundle();
+
+ discussingBundle.add(DISCUSSING, discussedBundle);
+ }
+
+ /**
+ * Remove a discussed publication.
+ *
+ * @param discussing The publications which is discussing the other publication.
+ * @param discussed The publication discussed by the other publication
+ */
+ public void removeDiscussedPublication(final Publication discussing,
+ final Publication discussed) {
+ final PublicationBundle discussingBundle = discussing.getPublicationBundle();
+ final PublicationBundle discussedBundle = discussed.getPublicationBundle();
+
+ discussingBundle.remove(DISCUSSING, discussedBundle);
+ }
+
+ /**
+ * Retrieves all publications which are discussing the provided publication.
+ *
+ * @param discussed
+ * @return
+ */
+ public PublicationCollection getDiscussingPublications(final Publication discussed) {
+ final PublicationBundle bundle = discussed.getPublicationBundle();
+
+ final DataCollection dataCollection = (DataCollection) bundle.get(DISCUSSED_BY);
+
+ return new PublicationCollection(dataCollection);
+ }
+
+ public void addDiscussingPublication(final Publication discussed,
+ final Publication discussing) {
+ final PublicationBundle discussedBundle = discussed.getPublicationBundle();
+ final PublicationBundle discussingBundle = discussing.getPublicationBundle();
+
+ discussedBundle.add(DISCUSSED_BY, discussingBundle);
+ }
+
+ public void removeDiscussingPublication(final Publication discussed,
+ final Publication discussing) {
+ final PublicationBundle discussedBundle = discussed.getPublicationBundle();
+ final PublicationBundle discussingBundle = discussing.getPublicationBundle();
+
+ discussedBundle.remove(DISCUSSED_BY, discussingBundle);
+ }
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesForm.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesForm.java
new file mode 100644
index 000000000..23fe99f40
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesForm.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2014 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutService;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.ui.ItemSearchWidget;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutDiscussesForm extends BasicItemForm implements FormProcessListener,
+ FormInitListener {
+
+ private ItemSearchWidget itemSearch;
+ private final static String ITEM_SEARCH = "discussedPublications";
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutDiscussesForm(final ItemSelectionModel itemModel) {
+
+ super("SciPublicationsAboutDisussesForm", itemModel);
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ protected void addWidgets() {
+ add(new Label(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.select_discussed")));
+ itemSearch = new ItemSearchWidget(
+ ITEM_SEARCH,
+ ContentType.findByAssociatedObjectType(Publication.class.getName()));
+ itemSearch.setDisableCreatePane(true);
+ add(itemSearch);
+ }
+
+ @Override
+ public void init(final FormSectionEvent event) throws FormProcessException {
+
+ setVisible(event.getPageState(), true);
+ }
+
+ @Override
+ public void process(final FormSectionEvent event) throws FormProcessException {
+
+ final FormData data = event.getFormData();
+ final PageState state = event.getPageState();
+ final Publication discussing = (Publication) itemModel.getSelectedObject(state);
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ if (!(getSaveCancelSection().getCancelButton().isSelected(state))) {
+ final Publication discussed = (Publication) data.get(ITEM_SEARCH);
+ service.addDiscussedPublication(discussing, discussed);
+ }
+
+ init(event);
+ }
+
+ @Override
+ public void validate(final FormSectionEvent event) throws FormProcessException {
+ //final PageState state = event.getPageState();
+ final FormData data = event.getFormData();
+
+ if (data.get(ITEM_SEARCH) == null) {
+ data.addError(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.none_selected"));
+ }
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesStep.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesStep.java
new file mode 100644
index 000000000..136f329db
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesStep.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2014 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class SciPublicationsAboutDiscussesStep extends SimpleEditStep {
+
+ protected static final String ADD_DISCUSSED = "add_discussed_publication";
+
+ public SciPublicationsAboutDiscussesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciPublicationsAboutDiscussesStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addDiscussedSheet = new SciPublicationsAboutDiscussesForm(itemModel);
+ add(ADD_DISCUSSED,
+ SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.add"),
+ new WorkflowLockedComponentAccess(addDiscussedSheet, itemModel),
+ addDiscussedSheet.getSaveCancelSection().getCancelButton());
+
+ final SciPublicationsAboutDiscussesTable discussedTable = new SciPublicationsAboutDiscussesTable(itemModel);
+ setDisplayComponent(discussedTable);
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesTable.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesTable.java
new file mode 100644
index 000000000..f04b703a2
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussesTable.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2010 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.ControlLink;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.Link;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.Table;
+import com.arsdigita.bebop.event.TableActionEvent;
+import com.arsdigita.bebop.event.TableActionListener;
+import com.arsdigita.bebop.table.TableCellRenderer;
+import com.arsdigita.bebop.table.TableColumn;
+import com.arsdigita.bebop.table.TableColumnModel;
+import com.arsdigita.bebop.table.TableModel;
+import com.arsdigita.bebop.table.TableModelBuilder;
+import com.arsdigita.cms.CMS;
+import com.arsdigita.cms.ContentSection;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.PublicationCollection;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutService;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.dispatcher.ItemResolver;
+import com.arsdigita.dispatcher.ObjectNotFoundException;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.util.LockableImpl;
+import java.math.BigDecimal;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutDiscussesTable extends Table implements TableActionListener {
+
+ private static final String TABLE_COL_DEL = "table_col_del";
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutDiscussesTable(final ItemSelectionModel itemModel) {
+
+ super();
+
+ this.itemModel = itemModel;
+
+ setEmptyView(new Label(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.none")));
+
+ final TableColumnModel colModel = getColumnModel();
+ colModel.add(new TableColumn(
+ 0,
+ SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication")));
+ colModel.add(new TableColumn(
+ 1,
+ SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.remove"),
+ TABLE_COL_DEL));
+
+ setModelBuilder(new SciPublicationsAboutTableModelBuilder(itemModel));
+
+ colModel.get(0).setCellRenderer(new PublicationCellRenderer());
+ colModel.get(1).setCellRenderer(new DeleteCellRenderer());
+
+ addTableActionListener(this);
+ }
+
+ private class SciPublicationsAboutTableModelBuilder extends LockableImpl
+ implements TableModelBuilder {
+
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutTableModelBuilder(final ItemSelectionModel itemModel) {
+ super();
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ public TableModel makeModel(final Table table, final PageState state) {
+ table.getRowSelectionModel().clearSelection(state);
+ final Publication publication = (Publication) itemModel.getSelectedObject(state);
+ return new SciPublicationsAboutTableModel(table, publication);
+ }
+
+ }
+
+ private class SciPublicationsAboutTableModel implements TableModel {
+
+ private final Table table;
+ private final PublicationCollection discussedPublications;
+ private Publication discussed;
+
+ public SciPublicationsAboutTableModel(final Table table,
+ final Publication publication) {
+ this.table = table;
+
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ discussedPublications = service.getDiscussedPublications(publication);
+ }
+
+ @Override
+ public int getColumnCount() {
+ return table.getColumnModel().size();
+ }
+
+ @Override
+ public boolean nextRow() {
+ boolean ret;
+
+ if (discussedPublications != null && discussedPublications.next()) {
+ discussed = discussedPublications.getPublication();
+ ret = true;
+ } else {
+ ret = false;
+ }
+
+ return ret;
+ }
+
+ @Override
+ public Object getElementAt(final int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return discussed.getTitle();
+ case 1:
+ return SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.remove");
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public Object getKeyAt(final int columnIndex) {
+ return discussed.getID();
+ }
+
+ }
+
+ private class PublicationCellRenderer extends LockableImpl implements TableCellRenderer {
+
+ @Override
+ public Component getComponent(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int column) {
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
+ final Publication discussing = (Publication) itemModel.getSelectedObject(state);
+
+ final boolean canEdit = securityManager.canAccess(
+ state.getRequest(),
+ com.arsdigita.cms.SecurityManager.EDIT_ITEM,
+ discussing);
+
+ if (canEdit) {
+ final Publication discussed;
+ try {
+ discussed = new Publication((BigDecimal) key);
+ } catch (ObjectNotFoundException ex) {
+ return new Label(value.toString());
+ }
+
+ final ContentSection section = discussed.getContentSection();
+ final ItemResolver resolver = section.getItemResolver();
+ final Link link = new Link(value.toString(),
+ resolver.generateItemURL(state,
+ discussed,
+ section,
+ discussed.getVersion()));
+ return link;
+ } else {
+ return new Label(value.toString());
+ }
+ }
+
+ }
+
+ private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer {
+
+ @Override
+ public Component getComponent(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int column) {
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
+ final Publication discussing = (Publication) itemModel.getSelectedObject(state);
+
+ final boolean canEdit = securityManager.canAccess(
+ state.getRequest(),
+ com.arsdigita.cms.SecurityManager.DELETE_ITEM,
+ discussing);
+
+ if (canEdit) {
+ final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
+ link.setConfirmation(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.remove.confirm"));
+ return link;
+ } else {
+ return new Label(value.toString());
+ }
+ }
+
+ }
+
+ @Override
+ public void cellSelected(final TableActionEvent event) {
+
+ final PageState state = event.getPageState();
+
+ final Publication discussed = new Publication(new BigDecimal(event.getRowKey().toString()));
+ final Publication discussing = (Publication) itemModel.getSelectedObject(state);
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ final TableColumn column = getColumnModel().get(event.getColumn().intValue());
+
+ if (TABLE_COL_DEL.equals(column.getHeaderKey())) {
+ service.removeDiscussedPublication(discussing, discussed);
+ }
+
+ }
+
+ @Override
+ public void headSelected(final TableActionEvent event) {
+ //Nothing to do
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingForm.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingForm.java
new file mode 100644
index 000000000..149e0ce97
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingForm.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2014 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.event.FormInitListener;
+import com.arsdigita.bebop.event.FormProcessListener;
+import com.arsdigita.bebop.event.FormSectionEvent;
+import com.arsdigita.cms.ContentType;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutService;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.ui.ItemSearchWidget;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutDiscussingForm extends BasicItemForm implements FormProcessListener,
+ FormInitListener {
+
+ private ItemSearchWidget itemSearch;
+ private final static String ITEM_SEARCH = "discussingPublications";
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutDiscussingForm(final ItemSelectionModel itemModel) {
+
+ super("SciPublicationsAboutDiscussingForm", itemModel);
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ public void addWidgets() {
+ add(new Label(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discusses.publication.select_discussing")));
+ itemSearch = new ItemSearchWidget(
+ ITEM_SEARCH,
+ ContentType.findByAssociatedObjectType(Publication.class.getName()));
+ add(itemSearch);
+ }
+
+ @Override
+ public void init(final FormSectionEvent event) throws FormProcessException {
+
+ setVisible(event.getPageState(), true);
+
+ }
+
+ @Override
+ public void process(final FormSectionEvent event) throws FormProcessException {
+
+ final FormData data = event.getFormData();
+ final PageState state = event.getPageState();
+ final Publication discussed = (Publication) itemModel.getSelectedObject(state);
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ if (!(getSaveCancelSection().getCancelButton().isSelected(state))) {
+ final Publication discussing = (Publication) data.get(ITEM_SEARCH);
+ service.addDiscussingPublication(discussed, discussing);
+ }
+
+ init(event);
+ }
+
+ @Override
+ public void validate(final FormSectionEvent event) throws FormProcessException {
+
+ final FormData data = event.getFormData();
+
+ if (data.get(ITEM_SEARCH) == null) {
+ data.addError(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.publication.none_selected"));
+ }
+ }
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingStep.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingStep.java
new file mode 100644
index 000000000..cc6174f28
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingStep.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2014 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutDiscussingStep extends SimpleEditStep {
+
+ protected static final String ADD_DISCUSSING = "add_discussing_publication";
+
+ public SciPublicationsAboutDiscussingStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent) {
+ this(itemModel, parent, null);
+ }
+
+ public SciPublicationsAboutDiscussingStep(final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final String prefix) {
+ super(itemModel, parent, prefix);
+
+ final BasicItemForm addDiscussingSheet = new SciPublicationsAboutDiscussingForm(itemModel);
+ add(ADD_DISCUSSING,
+ SciPublicationsAboutGlobalizationUtil.globalize("com.arsdigita.cms.contentassets.about.discussing.add"),
+ new WorkflowLockedComponentAccess(addDiscussingSheet, itemModel),
+ addDiscussingSheet.getSaveCancelSection().getCancelButton());
+
+ final SciPublicationsAboutDiscussingTable discussingTable = new SciPublicationsAboutDiscussingTable(itemModel);
+ setDisplayComponent(discussingTable);
+ }
+
+
+}
diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingTable.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingTable.java
new file mode 100644
index 000000000..fb31e625e
--- /dev/null
+++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutDiscussingTable.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2010 Jens Pelzetter
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+package com.arsdigita.cms.contentassets.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.ControlLink;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.Link;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.Table;
+import com.arsdigita.bebop.event.TableActionEvent;
+import com.arsdigita.bebop.event.TableActionListener;
+import com.arsdigita.bebop.table.TableCellRenderer;
+import com.arsdigita.bebop.table.TableColumn;
+import com.arsdigita.bebop.table.TableColumnModel;
+import com.arsdigita.bebop.table.TableModel;
+import com.arsdigita.bebop.table.TableModelBuilder;
+import com.arsdigita.cms.CMS;
+import com.arsdigita.cms.ContentSection;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.contentassets.PublicationCollection;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutGlobalizationUtil;
+import com.arsdigita.cms.contentassets.SciPublicationsAboutService;
+import com.arsdigita.cms.contenttypes.Publication;
+import com.arsdigita.cms.dispatcher.ItemResolver;
+import com.arsdigita.dispatcher.ObjectNotFoundException;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.util.LockableImpl;
+import java.math.BigDecimal;
+
+/**
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class SciPublicationsAboutDiscussingTable extends Table implements TableActionListener {
+
+ private static final String TABLE_COL_DEL = "table_col_del";
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutDiscussingTable(final ItemSelectionModel itemModel) {
+
+ super();
+
+ this.itemModel = itemModel;
+
+ setEmptyView(new Label(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.none")));
+
+ final TableColumnModel colModel = getColumnModel();
+ colModel.add(new TableColumn(
+ 0,
+ SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.publication")));
+ colModel.add(new TableColumn(
+ 1,
+ SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.publication.remove"),
+ TABLE_COL_DEL));
+
+ setModelBuilder(new SciPublicationsAboutTableModelBuilder(itemModel));
+
+ colModel.get(0).setCellRenderer(new PublicationCellRenderer());
+ colModel.get(1).setCellRenderer(new DeleteCellRenderer());
+
+ addTableActionListener(this);
+ }
+
+ private class SciPublicationsAboutTableModelBuilder extends LockableImpl
+ implements TableModelBuilder {
+
+ private final ItemSelectionModel itemModel;
+
+ public SciPublicationsAboutTableModelBuilder(final ItemSelectionModel itemModel) {
+ super();
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ public TableModel makeModel(final Table table, final PageState state) {
+ table.getRowSelectionModel().clearSelection(state);
+ final Publication publication = (Publication) itemModel.getSelectedObject(state);
+ return new SciPublicationsAboutTableModel(table, publication);
+ }
+
+ }
+
+ private class SciPublicationsAboutTableModel implements TableModel {
+
+ private final Table table;
+ private final PublicationCollection discussingPublications;
+ private Publication discussing;
+
+ public SciPublicationsAboutTableModel(final Table table,
+ final Publication publication) {
+ this.table = table;
+
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ discussingPublications = service.getDiscussingPublications(publication);
+ }
+
+ @Override
+ public int getColumnCount() {
+ return table.getColumnModel().size();
+ }
+
+ @Override
+ public boolean nextRow() {
+ boolean ret;
+
+ if (discussingPublications != null && discussingPublications.next()) {
+ discussing = discussingPublications.getPublication();
+ ret = true;
+ } else {
+ ret = false;
+ }
+
+ return ret;
+ }
+
+ @Override
+ public Object getElementAt(final int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return discussing.getTitle();
+ case 1:
+ return SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.publication.remove");
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public Object getKeyAt(final int columnIndex) {
+ return discussing.getID();
+ }
+ }
+
+ private class PublicationCellRenderer extends LockableImpl implements TableCellRenderer {
+
+ @Override
+ public Component getComponent(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int column) {
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
+ final Publication discussed = (Publication) itemModel.getSelectedObject(state);
+
+ final boolean canEdit = securityManager.canAccess(
+ state.getRequest(),
+ com.arsdigita.cms.SecurityManager.EDIT_ITEM,
+ discussed);
+
+ if (canEdit) {
+ final Publication discussing;
+ try {
+ discussing = new Publication((BigDecimal) key);
+ } catch (ObjectNotFoundException ex) {
+ return new Label(value.toString());
+ }
+
+ final ContentSection section = discussing.getContentSection();
+ final ItemResolver resolver = section.getItemResolver();
+ final Link link = new Link(value.toString(),
+ resolver.generateItemURL(state,
+ discussing,
+ section,
+ discussing.getVersion()));
+ return link;
+ } else {
+ return new Label(value.toString());
+ }
+ }
+
+ }
+
+ private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer {
+
+ @Override
+ public Component getComponent(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int column) {
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
+ final Publication discussed = (Publication) itemModel.getSelectedObject(state);
+
+ final boolean canEdit = securityManager.canAccess(
+ state.getRequest(),
+ com.arsdigita.cms.SecurityManager.DELETE_ITEM,
+ discussed);
+
+ if (canEdit) {
+ final ControlLink link = new ControlLink(new Label((GlobalizedMessage) value));
+ link.setConfirmation(SciPublicationsAboutGlobalizationUtil.globalize(
+ "com.arsdigita.cms.contentassets.about.discussing.publication.remove.confirm"));
+ return link;
+ } else {
+ return new Label(value.toString());
+ }
+ }
+
+ }
+
+ @Override
+ public void cellSelected(final TableActionEvent event) {
+
+ final PageState state = event.getPageState();
+
+ final Publication discussing = new Publication(new BigDecimal(event.getRowKey().toString()));
+ final Publication discussed = (Publication) itemModel.getSelectedObject(state);
+ final SciPublicationsAboutService service = new SciPublicationsAboutService();
+
+ final TableColumn column = getColumn(event.getColumn().intValue());
+
+ if (TABLE_COL_DEL.equals(column.getHeaderKey())) {
+ service.removeDiscussingPublication(discussed, discussing);
+ }
+ }
+
+ @Override
+ public void headSelected(final TableActionEvent event) {
+ //Nothing to do
+ }
+
+}
diff --git a/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/dynamicImage.xsl b/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/dynamicImage.xsl
index e41bee6b5..1b4f24fd1 100644
--- a/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/dynamicImage.xsl
+++ b/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/dynamicImage.xsl
@@ -123,7 +123,7 @@
-
+
diff --git a/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/minimizeHeader.xsl b/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/minimizeHeader.xsl
deleted file mode 100644
index 2c12e77a6..000000000
--- a/ccm-sci-bundle/web/themes/mandalay/user/includes/mandalay/minimizeHeader.xsl
+++ /dev/null
@@ -1,89 +0,0 @@
-
- '>]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-