diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java
new file mode 100644
index 0000000..51897c1
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsForm.java
@@ -0,0 +1,91 @@
+/*
+ * 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.authoring.BasicItemForm;
+import com.arsdigita.globalization.GlobalizedMessage;
+
+import org.libreccm.cdi.utils.CdiUtil;
+import org.scientificcms.publications.Proceedings;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.contenttypes.InProceedingsItem;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class InProceedingsProceedingsForm
+ extends BasicItemForm
+ implements FormProcessListener, FormInitListener {
+
+ private static final String PROCEEDINGS_SEARCH = "proceedings";
+
+ private PublicationSearchWidget proceedingsSearch;
+
+ public InProceedingsProceedingsForm(
+ final ItemSelectionModel itemModel,
+ final StringParameter selectedLangParam
+ ) {
+ super("InProceedingsProceedings", itemModel, selectedLangParam);
+ }
+
+ @Override
+ protected void addWidgets() {
+ proceedingsSearch = new PublicationSearchWidget(
+ PROCEEDINGS_SEARCH, Proceedings.class
+ );
+ proceedingsSearch.setLabel(
+ new GlobalizedMessage(
+ "publications.ui.inProceedings.selectProceedings",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ add(proceedingsSearch);
+ }
+
+ @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 data = event.getFormData();
+ final PageState state = event.getPageState();
+
+ final InProceedingsItem inProceedingsItem
+ = (InProceedingsItem) getItemSelectionModel()
+ .getSelectedItem(state);
+
+ if (this.getSaveCancelSection().getSaveButton().isSelected(state)) {
+ final Proceedings proceedings = (Proceedings) data
+ .get(PROCEEDINGS_SEARCH);
+
+ final InProceedingsController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(InProceedingsController.class);
+
+ controller.setProceedings(
+ inProceedingsItem.getPublication().getPublicationId(),
+ proceedings.getPublicationId()
+ );
+ }
+
+ init(event);
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java
new file mode 100644
index 0000000..45fa24e
--- /dev/null
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsSheet.java
@@ -0,0 +1,274 @@
+/*
+ * 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.Link;
+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.hibernate.secure.spi.PermissionCheckEntityInformation;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.security.PermissionChecker;
+import org.librecms.contentsection.privileges.ItemPrivileges;
+import org.scientificcms.publications.InProceedings;
+import org.scientificcms.publications.Proceedings;
+import org.scientificcms.publications.SciPublicationsConstants;
+import org.scientificcms.publications.contenttypes.InProceedingsItem;
+
+import java.math.BigDecimal;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class InProceedingsProceedingsSheet
+ extends Table
+ implements TableActionListener {
+
+ private static final String TABLE_COL_EDIT = "table_col_edit";
+
+ private static final String TABLE_COL_DEL = "table_col_del";
+
+ private final ItemSelectionModel itemModel;
+
+ public InProceedingsProceedingsSheet(final ItemSelectionModel itemModel) {
+ super();
+ this.itemModel = itemModel;
+
+ setEmptyView(
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.inProceedings.proceedings.none",
+ SciPublicationsConstants.BUNDLE
+ )
+ )
+ );
+
+ final TableColumnModel columnModel = getColumnModel();
+ columnModel.add(
+ new TableColumn(
+ 0,
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.inProceedings.proceedings",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ TABLE_COL_EDIT
+ )
+ );
+ columnModel.add(
+ new TableColumn(
+ 1,
+ new Label(
+ new GlobalizedMessage(
+ "publications.ui.inProceedings.proceedings.remove",
+ SciPublicationsConstants.BUNDLE
+ )
+ ),
+ TABLE_COL_DEL
+ )
+ );
+
+ setModelBuilder(new InProceedingsProceedingsSheetModelBuilder(
+ 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 InProceedingsItem inProceedingsItem
+ = (InProceedingsItem) itemModel.
+ getSelectedItem(state);
+ final InProceedings inProceedings = inProceedingsItem.getPublication();
+
+ final TableColumn column = getColumnModel().get(event.getColumn());
+
+ if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
+ // Nothing
+ } else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
+ final InProceedingsController controller = CdiUtil
+ .createCdiUtil()
+ .findBean(InProceedingsController.class);
+ controller.unsetProcceedings(
+ inProceedings.getPublicationId(),
+ inProceedings.getProceedings().getPublicationId()
+ );
+ }
+ }
+
+ @Override
+ public void headSelected(final TableActionEvent event) {
+ //Nothing to do
+ }
+
+ private class InProceedingsProceedingsSheetModelBuilder
+ extends LockableImpl
+ implements TableModelBuilder {
+
+ private ItemSelectionModel itemModel;
+
+ public InProceedingsProceedingsSheetModelBuilder(
+ ItemSelectionModel itemModel) {
+ this.itemModel = itemModel;
+ }
+
+ @Override
+ public TableModel makeModel(final Table table, final PageState state) {
+ table.getRowSelectionModel().clearSelection(state);
+ final InProceedingsItem inProceedingsItem
+ = (InProceedingsItem) itemModel.
+ getSelectedItem(state);
+ return new InProceedingsProceedingsSheetModel(
+ table,
+ state,
+ inProceedingsItem.getPublication()
+ );
+ }
+
+ }
+
+ private class InProceedingsProceedingsSheetModel implements TableModel {
+
+ private final Table table;
+ private final Proceedings proceedings;
+ private boolean done;
+
+ public InProceedingsProceedingsSheetModel(
+ final Table table,
+ final PageState state,
+ final InProceedings inProceedings
+ ) {
+ this.table = table;
+ this.proceedings = inProceedings.getProceedings();
+ if (proceedings == null) {
+ done = false;
+ } else {
+ done = true;
+ }
+ }
+
+ @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 proceedings.getTitle();
+ case 1:
+ return new Label(new GlobalizedMessage(
+ "publications.ui.inProceedings.proceedings.remove"));
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public Object getKeyAt(final int columnIndex) {
+ return proceedings.getPublicationId();
+ }
+
+ }
+
+ 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 InProceedingsItem inProceedingsItem
+ = (InProceedingsItem) itemModel.
+ getSelectedItem(state);
+
+ final boolean canEdit = permissionChecker
+ .isPermitted(ItemPrivileges.EDIT, inProceedingsItem);
+
+ if (canEdit) {
+ ControlLink link = new ControlLink((Component) value);
+ link.setConfirmation(
+ new GlobalizedMessage(
+ "publications.ui.inProceedings.proceedings.confirm_remove",
+ SciPublicationsConstants.BUNDLE
+ )
+ );
+ return link;
+ } else {
+ return new Text("");
+ }
+ }
+
+ }
+
+}
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java
index f1a9617..0f6b055 100644
--- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsProceedingsStep.java
@@ -40,7 +40,7 @@ public class InProceedingsProceedingsStep extends SimpleEditStep {
final BasicItemForm addProceedingsForm
= new InProceedingsProceedingsForm(
- itemModel
+ itemModel, selectedLangParam
);
add(
ADD_PROCEEDINGS_STEP,
diff --git a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java
index c714b21..28193f4 100644
--- a/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java
+++ b/sci-publications/src/main/java/com/arsdigita/cms/contenttypes/ui/InProceedingsPropertiesStep.java
@@ -81,7 +81,7 @@ public class InProceedingsPropertiesStep
);
final BasicPageForm editBasicSheet = new InProceedingsPropertyForm(
- itemModel, this
+ itemModel, this, selectedLangParam
);
basicProperties.add(
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
index 7612fca..0a38f24 100644
--- 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
@@ -21,7 +21,7 @@ import javax.transaction.Transactional;
* @author Jens Pelzetter
*/
@RequestScoped
-public class UnPublishedController extends PublicationPropertiesStep {
+public class UnPublishedController {
public static final String PLACE = "place";