diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/ComponentsTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/ComponentsTable.java
index 13e9547bf..c17f15763 100644
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/ComponentsTable.java
+++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/ComponentsTable.java
@@ -27,7 +27,6 @@ import com.arsdigita.bebop.ParameterSingleSelectionModel;
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;
@@ -38,14 +37,15 @@ import com.arsdigita.util.LockableImpl;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.pagemodel.ComponentModel;
+import org.libreccm.pagemodel.PageModel;
import java.util.Iterator;
import java.util.List;
/**
- * Table used in the {@link PageModelDetails} component to list the components
+ * Table used in the {@link PageModelDetails} component to list the components
* assigned to a {@link PageModel}.
- *
+ *
* @author Jens Pelzetter
*/
class ComponentsTable extends Table {
@@ -54,14 +54,41 @@ class ComponentsTable extends Table {
protected static final int COL_COMPONENT_TYPE = 1;
protected static final int COL_EDIT = 2;
protected static final int COL_DELETE = 3;
+
+ /**
+ * The {@link PageModelsTab} instance in which the table is displayed.
+ */
+ private final PageModelsTab pageModelsTab;
+ /**
+ * The selection model for the ID of the selected page model.
+ */
+ private final ParameterSingleSelectionModel selectedModelId;
+ /**
+ * The selection model for the ID of the selected component.
+ */
+ private final ParameterSingleSelectionModel selectedComponentId;
- public ComponentsTable(
- final PageModelsTab pageModelTab,
+ /**
+ * Constructor for the table.
+ *
+ * @param pageModelsTab The {@link PageModelsTab} instance in which
+ * the table is displayed.
+ * @param selectedModelId The selection model for the ID of the selected
+ * page model.
+ * @param selectedComponentId The selection model for the ID of the selected
+ * component.
+ */
+ ComponentsTable(
+ final PageModelsTab pageModelsTab,
final ParameterSingleSelectionModel selectedModelId,
final ParameterSingleSelectionModel selectedComponentId) {
super();
super.setIdAttr("pageModelComponentModelsTable");
+
+ this.pageModelsTab = pageModelsTab;
+ this.selectedModelId = selectedModelId;
+ this.selectedComponentId = selectedComponentId;
super.setEmptyView(new Label(new GlobalizedMessage(
"ui.admin.pagemodels.componentmodels.none",
@@ -89,86 +116,153 @@ class ComponentsTable extends Table {
"ui.admin.pagemodels.componentmodels.cols.delete.heading",
AdminUiConstants.ADMIN_BUNDLE))));
- columnModel.get(COL_EDIT).setCellRenderer(
- new TableCellRenderer() {
+ columnModel.get(COL_EDIT).setCellRenderer(this::renderEditCell);
+// columnModel.get(COL_EDIT).setCellRenderer(
+// new 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 ControlLink link = new ControlLink((Component) value);
+// return link;
+// }
+//
+// });
- @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) {
+ columnModel.get(COL_DELETE).setCellRenderer(this::renderDeleteCell);
+// columnModel.get(COL_DELETE).setCellRenderer(
+// new 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 ControlLink link = new ControlLink((Component) value);
+// link.setConfirmation(new GlobalizedMessage(
+// "ui.admin.pagemodels.componentmodels.cols.delete.confirmation",
+// AdminUiConstants.ADMIN_BUNDLE));
+// return link;
+// }
+//
+// });
- final ControlLink link = new ControlLink((Component) value);
- return link;
- }
-
- });
-
- columnModel.get(COL_DELETE).setCellRenderer(
- new 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 ControlLink link = new ControlLink((Component) value);
- link.setConfirmation(new GlobalizedMessage(
- "ui.admin.pagemodels.componentmodels.cols.delete.confirmation",
- AdminUiConstants.ADMIN_BUNDLE));
- return link;
- }
-
- });
-
- super.addTableActionListener(new TableActionListener() {
-
- @Override
- public void cellSelected(final TableActionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
- final String key = (String) event.getRowKey();
-
- switch (event.getColumn()) {
- case COL_EDIT:
- selectedComponentId.setSelectedKey(state, key);
- pageModelTab.showComponentForm(state);
- break;
- case COL_DELETE:
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
- controller.removeComponentModel(
- Long.parseLong(selectedModelIdStr),
- Long.parseLong(key));
- break;
- default:
- throw new IllegalArgumentException(
- "Invalid value for column");
- }
- }
-
- @Override
- public void headSelected(final TableActionEvent event) {
- //Nothing
- }
-
- });
+ super.addTableActionListener(new ComponentsTableActionListener());
+// super.addTableActionListener(new TableActionListener() {
+//
+// @Override
+// public void cellSelected(final TableActionEvent event)
+// throws FormProcessException {
+//
+// final PageState state = event.getPageState();
+// final String selectedModelIdStr = selectedModelId
+// .getSelectedKey(state);
+// final String key = (String) event.getRowKey();
+//
+// switch (event.getColumn()) {
+// case COL_EDIT:
+// selectedComponentId.setSelectedKey(state, key);
+// pageModelsTab.showComponentForm(state);
+// break;
+// case COL_DELETE:
+// final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+// final PageModelsController controller = cdiUtil
+// .findBean(PageModelsController.class);
+// controller.removeComponentModel(
+// Long.parseLong(selectedModelIdStr),
+// Long.parseLong(key));
+// break;
+// default:
+// throw new IllegalArgumentException(
+// "Invalid value for column");
+// }
+// }
+//
+// @Override
+// public void headSelected(final TableActionEvent event) {
+// //Nothing
+// }
+//
+// });
super.setModelBuilder(new ComponentsTableModelBuilder(
selectedModelId));
}
+ private Component renderEditCell(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int columnv) {
+
+ final ControlLink link = new ControlLink((Component) value);
+ return link;
+ }
+
+ private Component renderDeleteCell(final Table table,
+ final PageState state,
+ final Object value,
+ final boolean isSelected,
+ final Object key,
+ final int row,
+ final int column) {
+
+ final ControlLink link = new ControlLink((Component) value);
+ link.setConfirmation(new GlobalizedMessage(
+ "ui.admin.pagemodels.componentmodels.cols.delete.confirmation",
+ AdminUiConstants.ADMIN_BUNDLE));
+ return link;
+ }
+
+ private class ComponentsTableActionListener implements TableActionListener {
+
+ @Override
+ public void cellSelected(final TableActionEvent event)
+ throws FormProcessException {
+
+ final PageState state = event.getPageState();
+ final String selectedModelIdStr = selectedModelId
+ .getSelectedKey(state);
+ final String key = (String) event.getRowKey();
+
+ switch (event.getColumn()) {
+ case COL_EDIT:
+ selectedComponentId.setSelectedKey(state, key);
+ pageModelsTab.showComponentForm(state);
+ break;
+ case COL_DELETE:
+ final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
+ final PageModelsController controller = cdiUtil
+ .findBean(PageModelsController.class);
+ controller.removeComponentModel(
+ Long.parseLong(selectedModelIdStr),
+ Long.parseLong(key));
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Invalid value for column");
+ }
+ }
+
+ @Override
+ public void headSelected(final TableActionEvent event) {
+ //Nothing
+ }
+
+ }
+
private class ComponentsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsController.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsController.java
index 65d7b53d5..abfb88a06 100644
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsController.java
+++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsController.java
@@ -72,6 +72,12 @@ class PageModelsController implements Serializable {
@Inject
private PageModelRepository pageModelRepo;
+ /**
+ * Loads the data for rows of the table of page models. Takes care of
+ * loading all required lazily fetched properties.
+ *
+ * @return
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected List findPageModels() {
@@ -83,6 +89,15 @@ class PageModelsController implements Serializable {
.collect(Collectors.toList());
}
+ /**
+ * Checks if the name of a {@link PageModel} is unique within the page
+ * models for an application.
+ *
+ * @param applicationId The ID of the application.
+ * @param name The name to check.
+ *
+ * @return {@code true} if the name is unique, {@code false} otherwise.
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected boolean isUnique(final long applicationId,
final String name) {
@@ -98,6 +113,11 @@ class PageModelsController implements Serializable {
.isPresent();
}
+ /**
+ * Deletes a {@link PageModel}.
+ *
+ * @param pageModelId The ID of the {@link PageModel} to delete.
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected void deletePageModel(final long pageModelId) {
@@ -110,6 +130,16 @@ class PageModelsController implements Serializable {
pageModelRepo.delete(model);
}
+ /**
+ * Helper method for building the data object containing all data required
+ * for one row the tables of {@link PageModel}s.
+ *
+ * @param model The {@link PageModel} which is represented by the row.
+ *
+ * @return The {@link PageModelsTableRow} containing all data about the
+ * provided {@link PageModel} required to create the row about the
+ * {@link PageModel} in the table of {@link PageModel}s.
+ */
private PageModelsTableRow buildRow(final PageModel model) {
final PageModelsTableRow row = new PageModelsTableRow();
@@ -126,6 +156,13 @@ class PageModelsController implements Serializable {
return row;
}
+ /**
+ * Retrieves the localised title of the {@link ComponentModel}.
+ *
+ * @param clazz The class of the {@link ComponentModel}.
+ *
+ * @return The localised title of the {@link ComponentModel}.
+ */
protected String getComponentModelTitle(
final Class extends ComponentModel> clazz) {
@@ -142,6 +179,14 @@ class PageModelsController implements Serializable {
}
}
+ /**
+ * Retrieves the form for editing a {@link ComponentModel}.
+ *
+ * @param componentModelId The ID of the {@link ComponentModel} instance.
+ *
+ * @return The form for editing the properties of the {@link ComponentModel}
+ * instance.
+ */
protected Class extends Form> getComponentModelForm(
final long componentModelId) {
@@ -157,6 +202,14 @@ class PageModelsController implements Serializable {
return getComponentModelForm(clazz);
}
+ /**
+ * Retrieves the form for creating/editing an instance of
+ * {@link ComponentModel}.
+ *
+ * @param clazz The class of the {@link ComponentModel}.
+ *
+ * @return The form for the {@link ComponentModel}.
+ */
protected Class extends Form> getComponentModelForm(
final Class extends ComponentModel> clazz) {
@@ -172,6 +225,15 @@ class PageModelsController implements Serializable {
.editor();
}
+ /**
+ * Retrieves a list of all {@link ComponentModel} instances assigned to a
+ * {@link PageModel}.
+ *
+ * @param pageModelId The ID of the {@link PageModel}.
+ *
+ * @return A list of all {@link ComponentModel}s assigned to the
+ * {@link PageModel}.
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected List retrieveComponents(final long pageModelId) {
@@ -188,6 +250,14 @@ class PageModelsController implements Serializable {
return components;
}
+ /**
+ * Creates an instance of a {@link ComponentModel} and adds the instance to
+ * a {@link PageModel}.
+ *
+ * @param pageModelId The ID of the {@link PageModel} to which the new
+ * {@link ComponentModel} is assigned.
+ * @param componentModel The new {@link ComponentModel}.
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected void addComponentModel(final long pageModelId,
final ComponentModel componentModel) {
@@ -202,6 +272,14 @@ class PageModelsController implements Serializable {
}
+ /**
+ * Removes a {@link ComponentModel} instance from a {@link PageModel}. This
+ * deletes the component model.
+ *
+ * @param pageModelId The ID of the {@link PageModel} from which the
+ * {@link ComponentModel} is removed.
+ * @param componentModelId The ID of the {@link ComponentModel} to remove.
+ */
@Transactional(Transactional.TxType.REQUIRED)
protected void removeComponentModel(final long pageModelId,
final long componentModelId) {