diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteratureController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteratureController.java
new file mode 100644
index 0000000..f6b2f51
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteratureController.java
@@ -0,0 +1,57 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import org.scientificcms.publications.GreyLiterature;
+import org.scientificcms.publications.PublicationRepository;
+
+import java.util.Map;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@RequestScoped
+public class GreyLiteratureController {
+
+ public static final String START_PAGE = "startPage";
+ public static final String END_PAGE = "endPage";
+
+ @Inject
+ private PublicationRepository publicationRepository;
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public void saveGreyLiterature(
+ final long greyLiteratureId, final Map data
+ ) {
+ final GreyLiterature publication = publicationRepository
+ .findByIdAndType(greyLiteratureId, GreyLiterature.class
+ )
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "No GreyLiterature publication with ID %d found",
+ greyLiteratureId
+ )
+ )
+ );
+
+ if (data.containsKey(START_PAGE)) {
+ publication.setStartPage((Integer) data.get(START_PAGE));
+ }
+
+ if (data.containsKey(END_PAGE)) {
+ publication.setEndPage((Integer) data.get(END_PAGE));
+ }
+
+ publicationRepository.save(publication);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertiesStep.java
new file mode 100644
index 0000000..02960e6
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertiesStep.java
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicPageForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
+
+import org.scientificcms.publications.SciPublicationsConstants;
+
+import static com.arsdigita.cms.contenttypes.ui.PublicationPropertiesStep.*;
+import static com.arsdigita.cms.contenttypes.ui.UnPublishedPropertiesStep.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class GreyLiteraturePropertiesStep extends UnPublishedPropertiesStep {
+
+ private final StringParameter selectedLangParam;
+
+ public GreyLiteraturePropertiesStep(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final StringParameter selectedLangParam
+ ) {
+ super(itemModel, parent, selectedLangParam);
+ this.selectedLangParam = selectedLangParam;
+ }
+
+ public static Component getGreyLiteraturePropertySheet(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLangParam
+ ) {
+ final DomainObjectPropertySheet sheet
+ = (DomainObjectPropertySheet) getUnPublishedPropertySheet(
+ itemModel, selectedLangParam
+ );
+
+ sheet.add(
+ new GlobalizedMessage(
+ "publications.ui.greyliterature.pages_from",
+ SciPublicationsConstants.BUNDLE
+ ),
+ GreyLiteratureController.START_PAGE
+ );
+
+ sheet.add(
+ new GlobalizedMessage(
+ "publications.ui.greyliterature.pages_to",
+ SciPublicationsConstants.BUNDLE
+ ),
+ GreyLiteratureController.END_PAGE);
+
+ return sheet;
+ }
+
+ @Override
+ protected void addBasicProperties(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent
+ ) {
+ final SimpleEditStep basicProperties = new SimpleEditStep(
+ itemModel,
+ parent,
+ selectedLangParam,
+ EDIT_SHEET_NAME
+ );
+
+ final BasicPageForm editBasicSheet = new GreyLiteraturePropertyForm(
+ itemModel,
+ this,
+ selectedLangParam
+ );
+
+ basicProperties.add(
+ EDIT_SHEET_NAME,
+ new GlobalizedMessage(
+ "publications.ui.greyliterature.edit_basic_sheet",
+ SciPublicationsConstants.BUNDLE
+ ),
+ new WorkflowLockedComponentAccess(
+ editBasicSheet,
+ itemModel
+ ),
+ editBasicSheet.getSaveCancelSection().getCancelButton());
+
+ basicProperties.setDisplayComponent(
+ getGreyLiteraturePropertySheet(itemModel, selectedLangParam));
+
+ getSegmentedPanel().addSegment(
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.publication.basic_properties",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ basicProperties);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertyForm.java
new file mode 100644
index 0000000..1511b6c
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/GreyLiteraturePropertyForm.java
@@ -0,0 +1,140 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+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.bebop.event.FormSubmissionListener;
+import com.arsdigita.bebop.form.TextField;
+import com.arsdigita.bebop.parameters.IntegerParameter;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.scientificcms.publications.GreyLiterature;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.contenttypes.GreyLiteratureItem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class GreyLiteraturePropertyForm extends UnPublishedPropertyForm
+ implements FormInitListener,
+ FormProcessListener, FormSubmissionListener {
+
+ public static final String ID = "GreyLiteratureEdit";
+
+ private GreyLiteraturePropertiesStep step;
+
+ public GreyLiteraturePropertyForm(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLangParam
+ ) {
+ this(itemModel, null, selectedLangParam);
+ }
+
+ public GreyLiteraturePropertyForm(
+ final ItemSelectionModel itemModel,
+ final GreyLiteraturePropertiesStep step,
+ final StringParameter selectedLangParam
+ ) {
+ super(itemModel, step, selectedLangParam);
+ this.step = step;
+ addSubmissionListener(this);
+ }
+
+ @Override
+ protected void addWidgets() {
+
+ super.addWidgets();
+
+ final ParameterModel fromParam = new IntegerParameter(
+ GreyLiteratureController.START_PAGE
+ );
+ final TextField pagesFrom = new TextField(fromParam);
+ pagesFrom.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.greyliterature.pages_from",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(pagesFrom);
+
+ final ParameterModel toParam = new IntegerParameter(
+ GreyLiteratureController.END_PAGE);
+ final TextField pagesTo = new TextField(toParam);
+ pagesTo.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.greyliterature.pages_to",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(pagesTo);
+ }
+
+ @Override
+ public void init(final FormSectionEvent event) throws FormProcessException {
+ super.init(event);
+
+ final FormData data = event.getFormData();
+ final GreyLiteratureItem greyItem
+ = (GreyLiteratureItem) initBasicWidgets(
+ event);
+ final GreyLiterature grey = greyItem.getPublication();
+
+ data.put(
+ GreyLiteratureController.START_PAGE, grey.getStartPage()
+ );
+ data.put(
+ GreyLiteratureController.END_PAGE, grey.getEndPage()
+ );
+ }
+
+ @Override
+ public void process(final FormSectionEvent event)
+ throws FormProcessException {
+ super.process(event);
+
+ final FormData formData = event.getFormData();
+ final PageState state = event.getPageState();
+ final GreyLiteratureItem greyItem
+ = (GreyLiteratureItem) processBasicWidgets(
+ event);
+
+ if ((greyItem != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+
+ final Map data = new HashMap<>();
+ data.put(
+ GreyLiteratureController.START_PAGE,
+ formData.get(GreyLiteratureController.START_PAGE)
+ );
+ data.put(
+ GreyLiteratureController.END_PAGE,
+ formData.get(GreyLiteratureController.END_PAGE)
+ );
+
+ final GreyLiteratureController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(GreyLiteratureController.class);
+ controller.saveGreyLiterature(
+ greyItem.getPublication().getPublicationId(),
+ data
+ );
+ }
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java
new file mode 100644
index 0000000..7612fca
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedController.java
@@ -0,0 +1,114 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import org.librecms.assets.Organization;
+import org.librecms.contentsection.AssetRepository;
+import org.scientificcms.publications.PublicationRepository;
+import org.scientificcms.publications.UnPublished;
+
+import java.util.Map;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@RequestScoped
+public class UnPublishedController extends PublicationPropertiesStep {
+
+ public static final String PLACE = "place";
+
+ public static final String NUMBER = "number";
+
+ public static final String NUMBER_OF_PAGES = "numberOfPages";
+
+ @Inject
+ private AssetRepository assetRepository;
+
+ @Inject
+ private PublicationRepository publicationRepository;
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public void saveUnPublished(
+ final long unpublishedId, final Map data
+ ) {
+ final UnPublished unPublished = publicationRepository
+ .findByIdAndType(unpublishedId, UnPublished.class)
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "No UnPublished publication with ID %d found.",
+ unpublishedId
+ )
+ )
+ );
+
+ if (data.containsKey(PLACE)) {
+ unPublished.setPlace((String) data.get(PLACE));
+ }
+
+ if (data.containsKey(NUMBER)) {
+ unPublished.setNumber((String) data.get(NUMBER));
+ }
+
+ if (data.containsKey(NUMBER_OF_PAGES)) {
+ unPublished.setNumberOfPages((Integer) data.get(NUMBER_OF_PAGES));
+ }
+
+ publicationRepository.save(unPublished);
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public void setOrganzation(
+ final long unpublishedId, final long organizationId
+ ) {
+ final UnPublished unPublished = publicationRepository
+ .findByIdAndType(unpublishedId, UnPublished.class)
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "No UnPublished publication with ID %d found.",
+ unpublishedId
+ )
+ )
+ );
+
+ final Organization organization = assetRepository
+ .findById(organizationId, Organization.class)
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "No Organization with ID %d found.", organizationId
+ )
+ )
+ );
+
+ unPublished.setOrganization(organization);
+ publicationRepository.save(unPublished);
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public void unsetOrganization(final long unpublishedId) {
+ final UnPublished unPublished = publicationRepository
+ .findByIdAndType(unpublishedId, UnPublished.class)
+ .orElseThrow(
+ () -> new IllegalArgumentException(
+ String.format(
+ "No UnPublished publication with ID %d found.",
+ unpublishedId
+ )
+ )
+ );
+
+ unPublished.setOrganization(null);
+ publicationRepository.save(unPublished);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationForm.java
new file mode 100644
index 0000000..f45b194
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationForm.java
@@ -0,0 +1,90 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+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.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.assets.AssetSearchWidget;
+import com.arsdigita.cms.ui.authoring.BasicItemForm;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.librecms.assets.Organization;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.contenttypes.PublicationItem;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnPublishedOrganizationForm
+ extends BasicItemForm
+ implements FormProcessListener, FormInitListener {
+
+ private static final String ORGA_SEARCH = "unPublishedOrga";
+
+ private AssetSearchWidget orgaSearch;
+
+ public UnPublishedOrganizationForm(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLangParam
+ ) {
+ super("UnPublishedOrganizationForm", itemModel, selectedLangParam);
+ }
+
+ @Override
+ public void addWidgets() {
+
+ orgaSearch = new AssetSearchWidget(ORGA_SEARCH, Organization.class);
+ orgaSearch.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(orgaSearch);
+
+ }
+
+ @Override
+ public void init(final FormSectionEvent event) throws FormProcessException {
+ final PageState state = event.getPageState();
+
+ setVisible(state, true);
+ }
+
+ @Override
+ public void process(final FormSectionEvent event)
+ throws FormProcessException {
+ final FormData formData = event.getFormData();
+ final PageState state = event.getPageState();
+ final PublicationItem> publicationItem
+ = (PublicationItem) getItemSelectionModel()
+ .getSelectedItem(state);
+
+ if (getSaveCancelSection().getSaveButton().isSelected(state)) {
+ final Organization organization
+ = (Organization) formData
+ .get(ORGA_SEARCH);
+ final UnPublishedController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(UnPublishedController.class);
+ controller.setOrganzation(
+ publicationItem.getPublication().getPublicationId(),
+ organization.getObjectId()
+ );
+ }
+
+ init(event);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationSheet.java
new file mode 100644
index 0000000..13162f9
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationSheet.java
@@ -0,0 +1,266 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.ControlLink;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.PageState;
+import com.arsdigita.bebop.Table;
+import com.arsdigita.bebop.Text;
+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.ItemSelectionModel;
+import com.arsdigita.cms.dispatcher.Utilities;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.util.LockableImpl;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.security.PermissionChecker;
+import org.librecms.assets.Organization;
+import org.librecms.contentsection.privileges.ItemPrivileges;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.UnPublished;
+import org.scientificcms.publications.contenttypes.PublicationItem;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnPublishedOrganizationSheet
+ extends Table
+ implements TableActionListener {
+
+ private static final String TABLE_COL_EDIT = "table_col_edit";
+
+ private static final String TABLE_COL_DELETE = "table_col_delete";
+
+ private final ItemSelectionModel itemModel;
+
+ public UnPublishedOrganizationSheet(final ItemSelectionModel itemModel) {
+ super();
+ this.itemModel = itemModel;
+
+ setEmptyView(
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization.none",
+ SciPublicationsConstants.BUNDLE
+ )
+ )
+ );
+
+ final TableColumnModel columnModel = getColumnModel();
+ columnModel.add(
+ new TableColumn(
+ 0,
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ TABLE_COL_EDIT
+ )
+ );
+ columnModel.add(
+ new TableColumn(
+ 1,
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization.remove",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ TABLE_COL_DELETE
+ )
+ );
+
+ setModelBuilder(
+ new UnPublishedOrganizationSheetModelBuilder(itemModel)
+ );
+ columnModel.get(0).setCellRenderer(new EditCellRenderer());
+ columnModel.get(1).setCellRenderer(new DeleteCellRenderer());
+
+ addTableActionListener(this);
+ }
+
+ @Override
+ public void cellSelected(final TableActionEvent event) {
+ PageState state = event.getPageState();
+
+ final PublicationItem> publicationItem = (PublicationItem) itemModel
+ .getSelectedItem(state);
+
+ final TableColumn column = getColumnModel().get(event.getColumn());
+ if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
+ // Nothing to do
+ } else if (column.getHeaderKey().toString().equals(TABLE_COL_DELETE)) {
+ final UnPublishedController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(UnPublishedController.class);
+ controller.unsetOrganization(
+ publicationItem.getPublication().getPublicationId()
+ );
+ }
+ }
+
+ @Override
+ public void headSelected(final TableActionEvent event) {
+ //Nothing to do
+ }
+
+ private class UnPublishedOrganizationSheetModelBuilder
+ extends LockableImpl
+ implements TableModelBuilder {
+
+ private final ItemSelectionModel itemModel;
+
+ public UnPublishedOrganizationSheetModelBuilder(
+ final ItemSelectionModel itemModel) {
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ public TableModel makeModel(final Table table, final PageState state) {
+ table.getRowSelectionModel().clearSelection(state);
+ final PublicationItem> publicationItem
+ = (PublicationItem) itemModel
+ .getSelectedItem(state);
+ final UnPublished unPublished = (UnPublished) publicationItem
+ .getPublication();
+ return new UnPublishedOrganizationSheetModel(
+ table, state, unPublished
+ );
+ }
+
+ }
+
+ private class UnPublishedOrganizationSheetModel implements TableModel {
+
+ private final Table table;
+ private final Organization orga;
+ private boolean done;
+
+ public UnPublishedOrganizationSheetModel(
+ final Table table,
+ final PageState state,
+ final UnPublished unPublished
+ ) {
+ this.table = table;
+ orga = unPublished.getOrganization();
+ done = orga != null;
+ }
+
+ @Override
+ public int getColumnCount() {
+ return table.getColumnModel().size();
+ }
+
+ @Override
+ public boolean nextRow() {
+ boolean ret;
+
+ if (done) {
+ ret = true;
+ done = false;
+ } else {
+ ret = false;
+ }
+
+ return ret;
+ }
+
+ @Override
+ public Object getElementAt(final int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return orga.getTitle();
+ case 1:
+ return new Label(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization.remove",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public Object getKeyAt(final int columnIndex) {
+ return orga.getObjectId();
+ }
+
+ }
+
+ private class EditCellRenderer
+ 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
+ ) {
+ return new Text((String) value);
+ }
+
+ }
+
+ 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 CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final PermissionChecker permissionChecker = cdiUtil
+ .findBean(PermissionChecker.class);
+
+ final PublicationItem> publicationItem
+ = (PublicationItem) itemModel
+ .getSelectedItem(state);
+ final boolean canEdit = permissionChecker.isPermitted(
+ ItemPrivileges.EDIT, publicationItem
+ );
+
+ if (canEdit) {
+ final ControlLink link = new ControlLink((Label) value);
+ link.setConfirmation(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization.confirm_remove",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ return link;
+ } else {
+ return new Text("");
+ }
+ }
+
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationStep.java
new file mode 100644
index 0000000..b14897e
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedOrganizationStep.java
@@ -0,0 +1,62 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+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;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.scientificcms.publications.SciPublicationsConstants;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnPublishedOrganizationStep extends SimpleEditStep {
+
+ private static final String SET_UNPUBLISHED_ORGANIZATION_STEP
+ = "setUnPublishedOrganizationStep";
+
+ public UnPublishedOrganizationStep(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final StringParameter selectedLangParam
+ ) {
+ this(itemModel, parent, selectedLangParam, null);
+ }
+
+ public UnPublishedOrganizationStep(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final StringParameter selectedLangParam,
+ final String prefix
+ ) {
+ super(itemModel, parent, selectedLangParam, prefix);
+
+ final BasicItemForm setOrgaForm = new UnPublishedOrganizationForm(
+ itemModel, selectedLangParam
+ );
+ add(
+ SET_UNPUBLISHED_ORGANIZATION_STEP,
+ new GlobalizedMessage(
+ "publications.ui.unpublished.setOrganization",
+ SciPublicationsConstants.BUNDLE
+ ),
+ new WorkflowLockedComponentAccess(setOrgaForm, itemModel),
+ setOrgaForm.getSaveCancelSection().getCancelButton());
+
+ final UnPublishedOrganizationSheet sheet
+ = new UnPublishedOrganizationSheet(
+ itemModel
+ );
+ setDisplayComponent(sheet);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertiesStep.java
new file mode 100644
index 0000000..5c3ee0c
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertiesStep.java
@@ -0,0 +1,129 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.Component;
+import com.arsdigita.bebop.Label;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
+import com.arsdigita.cms.ui.authoring.BasicPageForm;
+import com.arsdigita.cms.ui.authoring.SimpleEditStep;
+import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
+import com.arsdigita.globalization.GlobalizedMessage;
+import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
+
+import org.scientificcms.publications.SciPublicationsConstants;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnPublishedPropertiesStep extends PublicationPropertiesStep {
+
+ private final StringParameter selectedLangParam;
+
+ public UnPublishedPropertiesStep(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent,
+ final StringParameter selectedLangParam
+ ) {
+ super(itemModel, parent, selectedLangParam);
+ this.selectedLangParam = selectedLangParam;
+ }
+
+ public static Component getUnPublishedPropertySheet(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLanParam
+ ) {
+ final DomainObjectPropertySheet sheet
+ = (DomainObjectPropertySheet) PublicationPropertiesStep
+ .getPublicationPropertySheet(
+ itemModel, selectedLanParam
+ );
+
+ sheet.add(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.place",
+ SciPublicationsConstants.BUNDLE
+ ),
+ UnPublishedController.PLACE
+ );
+
+ sheet.add(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.number",
+ SciPublicationsConstants.BUNDLE
+ ),
+ UnPublishedController.NUMBER
+ );
+
+ sheet.add(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.number_of_pages",
+ SciPublicationsConstants.BUNDLE
+ ),
+ UnPublishedController.NUMBER_OF_PAGES
+ );
+
+ return sheet;
+ }
+
+ @Override
+ protected void addBasicProperties(
+ final ItemSelectionModel itemModel,
+ final AuthoringKitWizard parent
+ ) {
+ final SimpleEditStep basicProperties = new SimpleEditStep(
+ itemModel,
+ parent,
+ selectedLangParam,
+ EDIT_SHEET_NAME
+ );
+
+ final BasicPageForm editBasicSheet = new UnPublishedPropertyForm(
+ itemModel, this, selectedLangParam
+ );
+
+ basicProperties.add(
+ EDIT_SHEET_NAME,
+ new GlobalizedMessage(
+ "publications.ui.unpublished.edit_basic_sheet",
+ SciPublicationsConstants.BUNDLE
+ ),
+ new WorkflowLockedComponentAccess(editBasicSheet, itemModel),
+ editBasicSheet.getSaveCancelSection().getCancelButton()
+ );
+
+ basicProperties.setDisplayComponent(
+ getUnPublishedPropertySheet(itemModel, selectedLangParam));
+
+ getSegmentedPanel().addSegment(
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.publication.basic_properties",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ basicProperties);
+ }
+
+ @Override
+ protected void addSteps(
+ final ItemSelectionModel itemModel, final AuthoringKitWizard parent
+ ) {
+ super.addSteps(itemModel, parent);
+
+ addStep(new UnPublishedOrganizationStep(
+ itemModel, parent, selectedLangParam),
+ new GlobalizedMessage(
+ "publications.ui.unpublished.organization",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertyForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertyForm.java
new file mode 100644
index 0000000..0a87dee
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/UnPublishedPropertyForm.java
@@ -0,0 +1,164 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes.ui;
+
+import com.arsdigita.bebop.FormData;
+import com.arsdigita.bebop.FormProcessException;
+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.bebop.event.FormSubmissionListener;
+import com.arsdigita.bebop.form.TextField;
+import com.arsdigita.bebop.parameters.IntegerParameter;
+import com.arsdigita.bebop.parameters.ParameterModel;
+import com.arsdigita.bebop.parameters.StringParameter;
+import com.arsdigita.cms.ItemSelectionModel;
+import com.arsdigita.cms.ui.assets.AssetSearchWidget;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.UnPublished;
+import org.scientificcms.publications.contenttypes.PublicationItem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class UnPublishedPropertyForm
+ extends PublicationPropertyForm
+ implements FormInitListener, FormProcessListener, FormSubmissionListener {
+
+ public static final String ID = "UnPublishedEdit";
+
+ private static final String ORGA_SEARCH = "organization";
+
+ private UnPublishedPropertiesStep step;
+
+ private AssetSearchWidget orgaSearch;
+
+ public UnPublishedPropertyForm(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLangParam
+ ) {
+ this(itemModel, null, selectedLangParam);
+ }
+
+ public UnPublishedPropertyForm(
+ final ItemSelectionModel itemModel,
+ final UnPublishedPropertiesStep step,
+ final StringParameter selectedLangParam
+ ) {
+ super(itemModel, step, selectedLangParam);
+ this.step = step;
+ addSubmissionListener(this);
+ }
+
+ @Override
+ protected void addWidgets() {
+
+ super.addWidgets();
+
+ final ParameterModel placeParam = new StringParameter(
+ UnPublishedController.PLACE);
+ final TextField place = new TextField(placeParam);
+ place.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.place",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(place);
+
+ ParameterModel numberParam = new StringParameter(
+ UnPublishedController.NUMBER
+ );
+ final TextField number = new TextField(numberParam);
+ number.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.number",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(number);
+
+ final ParameterModel numberOfPagesParam = new IntegerParameter(
+ UnPublishedController.NUMBER_OF_PAGES
+ );
+ final TextField numberOfPages = new TextField(numberOfPagesParam);
+ numberOfPages.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.unpublished.number_of_pages",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(numberOfPages);
+
+ }
+
+ @Override
+ public void init(final FormSectionEvent event) throws FormProcessException {
+ super.init(event);
+
+ final FormData data = event.getFormData();
+ final PublicationItem> publicationItem
+ = (PublicationItem) initBasicWidgets(event);
+ final UnPublished unPublished = (UnPublished) publicationItem
+ .getPublication();
+
+ data.put(
+ UnPublishedController.PLACE, unPublished.getPlace()
+ );
+ data.put(
+ UnPublishedController.NUMBER, unPublished.getNumber()
+ );
+ data.put(
+ UnPublishedController.NUMBER_OF_PAGES,
+ unPublished.getNumberOfPages()
+ );
+ }
+
+ @Override
+ public void process(final FormSectionEvent event)
+ throws FormProcessException {
+ super.process(event);
+
+ final FormData formData = event.getFormData();
+ final PageState state = event.getPageState();
+ final PublicationItem> publicationItem
+ = (PublicationItem) initBasicWidgets(event);
+
+ if ((publicationItem != null)
+ && getSaveCancelSection().getSaveButton().isSelected(state)) {
+ final UnPublished unpublished = (UnPublished) publicationItem
+ .getPublication();
+
+ final Map data = new HashMap<>();
+ data.put(
+ UnPublishedController.PLACE,
+ formData.get(UnPublishedController.PLACE)
+ );
+ data.put(
+ UnPublishedController.NUMBER,
+ formData.get(UnPublishedController.NUMBER)
+ );
+ data.put(
+ UnPublishedController.NUMBER_OF_PAGES,
+ formData.get(UnPublishedController.NUMBER_OF_PAGES)
+ );
+
+ final UnPublishedController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(UnPublishedController.class);
+ controller.saveUnPublished(unpublished.getPublicationId(), data);
+ }
+ }
+
+}