diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/AbstractComponentModelForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/AbstractComponentModelForm.java
deleted file mode 100644
index e8eb8b33b..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/AbstractComponentModelForm.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.Form;
-import com.arsdigita.bebop.FormData;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-import com.arsdigita.bebop.SaveCancelSection;
-import com.arsdigita.bebop.event.FormInitListener;
-import com.arsdigita.bebop.event.FormProcessListener;
-import com.arsdigita.bebop.event.FormSectionEvent;
-import com.arsdigita.bebop.event.FormValidationListener;
-import com.arsdigita.bebop.form.TextField;
-import com.arsdigita.bebop.parameters.LongParameter;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.ui.admin.AdminUiConstants;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.pagemodel.ComponentModel;
-import org.libreccm.pagemodel.ComponentModelRepository;
-import org.libreccm.pagemodel.PageModel;
-
-/**
- * Base form for creating forms for editing/creating components of a
- * {@link PageModel}.
- *
- * Subclasses must provided a constructor with the following signature:
- * {@code SomeComponentModelForm(PageModelTab, ParameterSingleSelectionModel, ParameterSingleSelectionModel)}.
- *
- * This constructor has to call
- * {@link #AbstractComponentModelForm(java.lang.String, com.arsdigita.ui.admin.pagemodels.PageModelsTab, com.arsdigita.bebop.ParameterSingleSelectionModel, com.arsdigita.bebop.ParameterSingleSelectionModel)}
- *
- * with the provided parameters and a unique name for the form. Usually this be
- * the name of the component model which is associated with the form and the
- * suffix {@code Form}.
- *
- * The constructor is called is using reflection. The parameters passed to the
- * constructor are:
- *
- * - The {@link PageModelsTab} in which the form is displayed.
- * - The {@link ParameterSingleSelectionModel} which holds the ID of the
- * currently selected {@link PageModel}.
- * - The {@link ParameterSingleSelectionModel} which holds the ID of the
- * currently selected {@link ComponentModel}. The selected key of the selection
- * model might be null if a new component model is created.
- *
- *
- * @param
- *
- * @author Jens Pelzetter
- */
-public abstract class AbstractComponentModelForm
- extends Form
- implements FormInitListener,
- FormValidationListener,
- FormProcessListener {
-
- /**
- * Constant for identifying the key text field.
- */
- private static final String COMPONENT_KEY = "componentKey";
-
- /**
- * The {@link PageModelsTab} in which the form is used
- */
- private final PageModelsTab pageModelTab;
- /**
- * ID of the selected {@link PageModel}.
- */
- private final ParameterSingleSelectionModel selectedModelId;
- /**
- * ID of the selected {@link ComponentModel}. {@code null} of empty if a new
- * component is added.
- */
- private final ParameterSingleSelectionModel selectedComponentId;
-
- /**
- * Text field for the component's key in the page model.
- */
- private TextField keyField;
-
- private SaveCancelSection saveCancelSection;
-
- /**
- * The selected component model.
- */
- private T componentModel;
-
- public AbstractComponentModelForm(
- final String name,
- final PageModelsTab pageModelTab,
- final ParameterSingleSelectionModel selectedModelId,
- final ParameterSingleSelectionModel selectedComponentId) {
-
- super(name);
-
- this.pageModelTab = pageModelTab;
- this.selectedModelId = selectedModelId;
- this.selectedComponentId = selectedComponentId;
-
- createWidgets();
-
- super.addInitListener(this);
- super.addValidationListener(this);
- super.addProcessListener(this);
- }
-
- /**
- * Helper method called by the constructor to create the widgets of the
- * form. The method also calls the {@link #addWidgets()} after the basic
- * widgets have been created and adds the {@link SaveCancelSection} at the
- * end.
- */
- private void createWidgets() {
- keyField = new TextField(COMPONENT_KEY);
- keyField.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.components.key.label",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(keyField);
-
- addWidgets();
-
- saveCancelSection = new SaveCancelSection();
- super.add(saveCancelSection);
- }
-
- /**
- * Provides access to the {@link PageModelsTab}.
- *
- * @return
- */
- protected final PageModelsTab getPageModelTab() {
- return pageModelTab;
- }
-
- /**
- * Provides access the {@link ParameterSingleSelectionModel} holding the ID
- * of the currently selected {@link ComponentModel}. The selected key of the
- * selection model is {@code null} if a new {@link ComponentModel} is
- * created.
- *
- * @return
- */
- protected final ParameterSingleSelectionModel getSelectedComponentId() {
- return selectedComponentId;
- }
-
- /**
- * Provides access to the {@link ParameterSingleSelectionModel} holding the
- * ID of the currently selected {@link PageModel}.
- *
- * @return
- */
- protected final ParameterSingleSelectionModel getSelectedModelId() {
- return selectedModelId;
- }
-
- /**
- * Provides access to the {@link SaveCancelSection} of the form allowing
- * subclasses to check if the Save button of the
- * {@link SaveCancelSection} has been pressed.
- *
- * @return
- */
- protected final SaveCancelSection getSaveCancelSection() {
- return saveCancelSection;
- }
-
- /**
- * Provides access to the currently selected {@link PageModel}. The
- * implementation for the init and validation listeners
- * ({@link #init(com.arsdigita.bebop.event.FormSectionEvent)} and
- * {@link #validate(com.arsdigita.bebop.event.FormSectionEvent)} initialise
- * this field.
- *
- * @return
- */
- protected final T getComponentModel() {
- return componentModel;
- }
-
- /**
- * Subclasses have to override this method to add the widgets specific for a
- * component model.
- */
- protected abstract void addWidgets();
-
- /**
- * Creates a new {@link ComponentModel} of a specific type. This method is
- * only a wrapper around the constructor. An implementation should not add
- * the component to a {@link PageModel} or save the {@link ComponentModel}
- * in the database. This class takes care of that.
- *
- * @return A new {@link ComponentModel}.
- */
- protected abstract T createComponentModel();
-
- /**
- * Updates the current component model with data from the form.
- *
- * @param componentModel
- * @param state
- * @param data
- */
- protected abstract void updateComponentModel(T componentModel,
- PageState state,
- FormData data);
-
- /**
- * Init listener for the component form. Subclasses should override this
- * method to initialise their fields. If this method is overridden the
- * overriding method must call {@code super.init(event)}.
- * Otherwise the {@link #keyField} will not be initialised properly. Also
- * the method loads the selected current component model from the database
- * and stores it in the {@link #componentModel} field. Overriding methods
- * can access the field using the {@link #getComponentModel()} method. If
- * {@link super.init(event)} is not called the {@link #componentModel} field
- * will not be initialised.
- *
- * @param event The event which caused the listener to be invoked.
- *
- * @throws FormProcessException
- */
- @Override
- @SuppressWarnings("unchecked")
- public void init(final FormSectionEvent event) throws FormProcessException {
-
- final PageState state = event.getPageState();
- final String selectedComponentIdStr = selectedComponentId
- .getSelectedKey(state);
-
- if (selectedComponentIdStr != null
- && !selectedComponentIdStr.isEmpty()) {
-
-
- componentModel = loadSelectedComponent(
- Long.parseLong(selectedComponentIdStr));
-
- keyField.setValue(state, componentModel.getKey());
- }
- }
-
- @SuppressWarnings("unchecked")
- protected T loadSelectedComponent(final long componentId) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ComponentModelRepository componentModelRepo = cdiUtil
- .findBean(ComponentModelRepository.class);
-
- return (T) componentModelRepo
- .findById(componentId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No ComponentModel with ID %d in the database.",
- componentId)));
- }
-
- /**
- * Validation listener for the component form. Subclasses should override
- * this method to validate their fields if necessary.. If this method is
- * overridden the overriding method must call
- * {@code super.validate(event)}. Otherwise the {@link #keyField} will not
- * be validated properly.
- *
- * @param event The event which caused the listener to be invoked.
- *
- * @throws FormProcessException
- */
- @Override
- public void validate(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
-
- if (saveCancelSection.getSaveButton().isSelected(state)) {
-
- final FormData data = event.getFormData();
- final String keyValue = data.getString(COMPONENT_KEY);
-
- if (keyValue == null
- || keyValue.isEmpty()
- || keyValue.matches("\\s*")) {
-
- data.addError(COMPONENT_KEY,
- new GlobalizedMessage(
- "ui.admin.pagemodels.components.key.error.not_empty",
- AdminUiConstants.ADMIN_BUNDLE));
- }
- }
- }
-
- /**
- * Process listener for the component form. This method can't be overridden.
- * Instead subclasses have to implement
- * {@link #updateComponentModel(org.libreccm.pagemodel.ComponentModel, com.arsdigita.bebop.PageState, com.arsdigita.bebop.FormData)}
- * to set their specific values on the current component model. The
- * implementation of that method is called by the this method.
- *
- * @param event The event which caused the listener to be invoked.
- *
- * @throws FormProcessException
- */
- @Override
- public final void process(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
-
- if (saveCancelSection.getSaveButton().isSelected(state)) {
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
- final String selectedComponentIdStr = selectedComponentId
- .getSelectedKey(state);
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
-
- final FormData data = event.getFormData();
- final String keyValue = data.getString(COMPONENT_KEY);
-
- if (selectedComponentIdStr == null
- || selectedComponentIdStr.isEmpty()) {
-
- componentModel = createComponentModel();
- componentModel.setKey(keyValue);
- updateComponentModel(componentModel, state, data);
-
- controller.addComponentModel(Long.parseLong(selectedModelIdStr),
- componentModel);
- } else {
-
- componentModel = retrieveComponentModel(selectedComponentIdStr);
- componentModel.setKey(keyValue);
-
- updateComponentModel(componentModel, state, data);
-
- final ComponentModelRepository componentModelRepo = cdiUtil
- .findBean(ComponentModelRepository.class);
- componentModelRepo.save(componentModel);
- }
-
- }
-
- selectedComponentId.clearSelection(state);
- pageModelTab.showPageModelDetails(state);
-
- }
-
- /**
- * Helper method for retrieving the component model from the database.
- *
- * @param componentModelId The ID of the component model to retrieve.
- *
- * @return The component model.
- */
- @SuppressWarnings("unchecked")
- private T retrieveComponentModel(final String componentModelId) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
-
- final ComponentModelRepository componentModelRepo = cdiUtil
- .findBean(ComponentModelRepository.class);
-
- return (T) componentModelRepo
- .findById(Long.parseLong(componentModelId))
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No ComponentModel with ID %s in the database",
- componentModelId)));
-
- }
-
-}
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
deleted file mode 100644
index c17f15763..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/ComponentsTable.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.Component;
-import com.arsdigita.bebop.ControlLink;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.Label;
-import com.arsdigita.bebop.PageState;
-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.TableColumn;
-import com.arsdigita.bebop.table.TableColumnModel;
-import com.arsdigita.bebop.table.TableModel;
-import com.arsdigita.bebop.table.TableModelBuilder;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.ui.admin.AdminUiConstants;
-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
- * assigned to a {@link PageModel}.
- *
- * @author Jens Pelzetter
- */
-class ComponentsTable extends Table {
-
- protected static final int COL_COMPONENT_KEY = 0;
- 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;
-
- /**
- * 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",
- AdminUiConstants.ADMIN_BUNDLE)));
-
- final TableColumnModel columnModel = getColumnModel();
- columnModel.add(new TableColumn(
- COL_COMPONENT_KEY,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.componentmodels.cols.key.heading",
- AdminUiConstants.ADMIN_BUNDLE))));
- columnModel.add(new TableColumn(
- COL_COMPONENT_TYPE,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.componentmodels.cols.type.heading",
- AdminUiConstants.ADMIN_BUNDLE))));
- columnModel.add(new TableColumn(
- COL_EDIT,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.componentmodels.cols.edit.heading",
- AdminUiConstants.ADMIN_BUNDLE))));
- columnModel.add(new TableColumn(
- COL_DELETE,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.componentmodels.cols.delete.heading",
- AdminUiConstants.ADMIN_BUNDLE))));
-
- 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;
-// }
-//
-// });
-
- 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;
-// }
-//
-// });
-
- 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 {
-
- private final ParameterSingleSelectionModel selectedModelId;
-
- public ComponentsTableModelBuilder(
- final ParameterSingleSelectionModel selectedModelId) {
-
- this.selectedModelId = selectedModelId;
- }
-
- @Override
- public TableModel makeModel(final Table table,
- final PageState state) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
-
- final List components = controller
- .retrieveComponents(Long.parseLong(selectedModelIdStr));
-
- return new ComponentsTableModel(components);
- }
-
- }
-
- private class ComponentsTableModel implements TableModel {
-
- private final Iterator iterator;
- private ComponentModel currentComponent;
-
- public ComponentsTableModel(
- final List components) {
-
- iterator = components.iterator();
- }
-
- @Override
- public int getColumnCount() {
- return 4;
- }
-
- @Override
- public boolean nextRow() {
-
- if (iterator.hasNext()) {
- currentComponent = iterator.next();
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public Object getElementAt(final int columnIndex) {
-
- switch (columnIndex) {
- case ComponentsTable.COL_COMPONENT_KEY:
- return currentComponent.getKey();
- case ComponentsTable.COL_COMPONENT_TYPE: {
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
- return controller
- .getComponentModelTitle(currentComponent.getClass());
- }
- case ComponentsTable.COL_EDIT:
- return new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.components.edit",
- AdminUiConstants.ADMIN_BUNDLE));
- case ComponentsTable.COL_DELETE:
- return new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.components.delete",
- AdminUiConstants.ADMIN_BUNDLE));
- default:
- throw new IllegalArgumentException(
- "Not a valid column index");
- }
- }
-
- @Override
- public Object getKeyAt(final int columnIndex) {
-
- return currentComponent.getComponentModelId();
- }
-
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelDetails.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelDetails.java
deleted file mode 100644
index cafe05f7d..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelDetails.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.ActionLink;
-import com.arsdigita.bebop.BoxPanel;
-import com.arsdigita.bebop.Form;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.Label;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-import com.arsdigita.bebop.PropertySheet;
-import com.arsdigita.bebop.event.ActionEvent;
-import com.arsdigita.bebop.event.FormSectionEvent;
-import com.arsdigita.bebop.event.PrintEvent;
-import com.arsdigita.bebop.event.PrintListener;
-import com.arsdigita.bebop.form.Option;
-import com.arsdigita.bebop.form.SingleSelect;
-import com.arsdigita.bebop.form.Submit;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.ui.admin.AdminUiConstants;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.core.UnexpectedErrorException;
-import org.libreccm.pagemodel.ComponentModel;
-import org.libreccm.pagemodel.ComponentModels;
-import org.libreccm.pagemodel.PageModel;
-import org.libreccm.pagemodel.PageModelComponentModel;
-import org.libreccm.pagemodel.PageModelManager;
-import org.libreccm.pagemodel.PageModelRepository;
-
-import java.util.List;
-import java.util.TooManyListenersException;
-
-/**
- * Shows the details about a {@link PageModel} including the
- * {@link ComponentModel}s assigned to the {@link PageModel}.
- *
- * @author Jens Pelzetter
- */
-class PageModelDetails extends BoxPanel {
-
- private final PageModelsTab pageModelTab;
- private final ParameterSingleSelectionModel selectedModelId;
- private final ParameterSingleSelectionModel selectedComponentId;
-
- public PageModelDetails(
- final PageModelsTab pageModelTab,
- final ParameterSingleSelectionModel selectedModelId,
- final ParameterSingleSelectionModel selectedComponentId) {
-
- super(BoxPanel.VERTICAL);
-
- this.pageModelTab = pageModelTab;
- this.selectedModelId = selectedModelId;
- this.selectedComponentId = selectedComponentId;
-
- final ActionLink backLink = new ActionLink(new GlobalizedMessage(
- "ui.admin.pagemodels.details.back",
- AdminUiConstants.ADMIN_BUNDLE));
- backLink.setClassAttr("back-link");
- backLink.addActionListener(event -> {
- selectedModelId.clearSelection(event.getPageState());
- pageModelTab.showPageModelsTable(event.getPageState());
- });
- super.add(backLink);
-
- final Label heading = new Label();
- heading.setClassAttr("heading");
- heading.addPrintListener(this::printHeading);
- super.add(heading);
-
- final PropertySheet propertySheet = new PropertySheet(
- new PageModelPropertySheetModelBuilder(selectedModelId));
- super.add(propertySheet);
-
- final ActionLink editProperties = new ActionLink(new GlobalizedMessage(
- "ui.admin.pagemodels.details.edit_properties",
- AdminUiConstants.ADMIN_BUNDLE));
- editProperties.addActionListener(event -> {
- pageModelTab.showPageModelForm(event.getPageState());
- });
-
- final ActionLink publishLink = new ActionLink(new GlobalizedMessage(
- "ui.admin.pagemodels.details.publish",
- AdminUiConstants.ADMIN_BUNDLE));
- publishLink.addActionListener(this::publishPageModel);
-
- final BoxPanel actionsPanel = new BoxPanel(BoxPanel.HORIZONTAL);
- actionsPanel.add(editProperties);
- actionsPanel.add(publishLink);
- super.add(actionsPanel);
-
- final AddComponentForm addComponentForm = new AddComponentForm(
- pageModelTab);
- super.add(addComponentForm);
-
- final ComponentsTable componentsTable
- = new ComponentsTable(
- pageModelTab, selectedModelId, selectedComponentId);
- super.add(componentsTable);
- }
-
- private void printHeading(final PrintEvent event) {
- final PageState state = event.getPageState();
- final Label target = (Label) event.getTarget();
- final PageModelRepository pageModelRepo = CdiUtil
- .createCdiUtil()
- .findBean(PageModelRepository.class);
- final PageModel pageModel = pageModelRepo
- .findById(Long.parseLong(selectedModelId.getSelectedKey(state)))
- .get();
- target.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.details.heading",
- AdminUiConstants.ADMIN_BUNDLE,
- new String[]{pageModel.getName()}));
- }
-
- private void publishPageModel(final ActionEvent event) {
-
- final PageState state = event.getPageState();
-
- final String selectedPageModelIdStr = selectedModelId
- .getSelectedKey(state);
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelManager pageModelManager = cdiUtil
- .findBean(PageModelManager.class);
- final PageModelRepository pageModelRepo = cdiUtil
- .findBean(PageModelRepository.class);
-
- final PageModel pageModel = pageModelRepo
- .findById(Long.parseLong(selectedPageModelIdStr))
- .orElseThrow(() -> new UnexpectedErrorException(String
- .format("No PageModel with ID %s in the database.",
- selectedPageModelIdStr)));
-
- final PageModel draftModel = pageModelManager.getDraftVersion(pageModel);
- pageModelManager.publish(draftModel);
- }
-
- /**
- * Form for selecting the type of {@link ComponentModel} to add to the
- * {@link PageModel}.
- */
- private class AddComponentForm extends Form {
-
- private final PageModelsTab pageModelTab;
- private final SingleSelect selectType;
-
- public AddComponentForm(final PageModelsTab pageModelTab) {
-
- super("pagemodel_add_component_form",
- new BoxPanel(BoxPanel.HORIZONTAL));
-
- this.pageModelTab = pageModelTab;
-
- final Label formLabel = new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.add_new_component",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(formLabel);
-
- selectType = new SingleSelect("select_component_type");
- selectType.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.add_new_component.type",
- AdminUiConstants.ADMIN_BUNDLE));
- try {
- selectType
- .addPrintListener(new ComponentModelSelectPrintListener());
- } catch (TooManyListenersException ex) {
- throw new UnexpectedErrorException(ex);
- }
- super.add(selectType);
-
- final Submit submit = new Submit(new GlobalizedMessage(
- "ui.admin.pagemodels.add_new_component.submit",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(submit);
-
- super.addProcessListener(this::process);
- }
-
- public void process(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
- final String type = (String) selectType.getValue(state);
- final Class extends ComponentModel> clazz = getClass(type);
-
- pageModelTab.showNewComponentForm(state, clazz);
- }
-
- @SuppressWarnings("unchecked")
- private Class extends ComponentModel> getClass(final String type) {
- try {
- return (Class extends ComponentModel>) Class.forName(type);
- } catch (ClassNotFoundException ex) {
- throw new UnexpectedErrorException(ex);
- }
- }
-
- }
-
- /**
- * {@link PrintListener} implementation for the select box in the
- * {@link AddComponentForm}.
- */
- private class ComponentModelSelectPrintListener implements PrintListener {
-
- @Override
- public void prepare(final PrintEvent event) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ComponentModels componentModels = cdiUtil
- .findBean(ComponentModels.class);
-
- final SingleSelect target = (SingleSelect) event.getTarget();
- target.clearOptions();
-
- final List models = componentModels
- .findAvailableComponentModels();
- for (final PageModelComponentModel model : models) {
- target.addOption(createOption(model));
- }
- }
-
- private Option createOption(final PageModelComponentModel model) {
-
- final GlobalizedMessage title = new GlobalizedMessage(
- model.titleKey(), model.descBundle());
-
- return new Option(model.modelClass().getName(),
- new Label(title));
- }
-
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelForm.java
deleted file mode 100644
index b92565a4c..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelForm.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.Form;
-import com.arsdigita.bebop.FormData;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.Label;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-import com.arsdigita.bebop.SaveCancelSection;
-import com.arsdigita.bebop.Text;
-import com.arsdigita.bebop.event.FormInitListener;
-import com.arsdigita.bebop.event.FormProcessListener;
-import com.arsdigita.bebop.event.FormSectionEvent;
-import com.arsdigita.bebop.event.FormValidationListener;
-import com.arsdigita.bebop.form.Option;
-import com.arsdigita.bebop.form.SingleSelect;
-import com.arsdigita.bebop.form.TextArea;
-import com.arsdigita.bebop.form.TextField;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.kernel.KernelConfig;
-import com.arsdigita.ui.admin.AdminUiConstants;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.configuration.ConfigurationManager;
-import org.libreccm.core.UnexpectedErrorException;
-import org.libreccm.pagemodel.PageModel;
-import org.libreccm.pagemodel.PageModelManager;
-import org.libreccm.pagemodel.PageModelRepository;
-import org.libreccm.web.ApplicationRepository;
-import org.libreccm.web.CcmApplication;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.Optional;
-import java.util.TooManyListenersException;
-
-/**
- * Form for creating a new {@link PageModel}.
- *
- * @author Jens Pelzetter
- */
-class PageModelForm extends Form {
-
- private static final String MODEL_APPLICATION = "application";
- private static final String MODEL_NAME = "model_name";
- private static final String MODEL_TITLE = "model_title";
- private static final String MODEL_DESC = "model_desc";
-
- private final PageModelsTab pageModelTab;
- private final ParameterSingleSelectionModel selectedModelId;
-
- private final TextField nameField;
- private final TextField titleField;
- private final TextArea descArea;
- private final SingleSelect applicationSelect;
- private final SaveCancelSection saveCancelSection;
-
- public PageModelForm(
- final PageModelsTab pageModelTab,
- final ParameterSingleSelectionModel selectedModelId) {
-
- super("pagemodelsform");
-
- this.pageModelTab = pageModelTab;
- this.selectedModelId = selectedModelId;
-
- final Label heading = new Label(event -> {
-
- final PageState state = event.getPageState();
- final Label target = (Label) event.getTarget();
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
- if (selectedModelIdStr == null || selectedModelIdStr.isEmpty()) {
- target.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.create_new",
- AdminUiConstants.ADMIN_BUNDLE));
- } else {
- target.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.edit",
- AdminUiConstants.ADMIN_BUNDLE));
- }
- });
- heading.setClassAttr("heading");
- super.add(heading);
-
- nameField = new TextField(MODEL_NAME);
- nameField.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.name",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(nameField);
-
- titleField = new TextField(MODEL_TITLE);
- titleField.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.title",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(titleField);
-
- descArea = new TextArea(MODEL_DESC);
- descArea.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.desc",
- AdminUiConstants.ADMIN_BUNDLE));
- super.add(descArea);
-
- applicationSelect = new SingleSelect(MODEL_APPLICATION);
- applicationSelect.setLabel(new GlobalizedMessage(
- "ui.admin.pagemodels.application",
- AdminUiConstants.ADMIN_BUNDLE));
- try {
- applicationSelect.addPrintListener(event -> {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ApplicationRepository applicationRepo = cdiUtil
- .findBean(ApplicationRepository.class);
-
- final SingleSelect target = (SingleSelect) event.getTarget();
- target.clearOptions();
-
- final List applications = applicationRepo
- .findAll();
- applications.sort((app1, app2) -> {
- return app1.getPrimaryUrl().compareTo(app2.getPrimaryUrl());
- });
- for (final CcmApplication app : applications) {
- target.addOption(new Option(app.getPrimaryUrl(),
- new Text(app.getPrimaryUrl())));
- }
- });
-
- } catch (TooManyListenersException ex) {
- throw new UnexpectedErrorException(ex);
- }
- super.add(applicationSelect);
-
- saveCancelSection = new SaveCancelSection();
- super.add(saveCancelSection);
-
- super.addValidationListener(new ValidationListener());
- super.addInitListener(new InitListener());
- super.addProcessListener(new ProcessListener());
- }
-
- private class ValidationListener implements FormValidationListener {
-
- @Override
- public void validate(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
-
- if (saveCancelSection.getSaveButton().isSelected(state)) {
-
- final FormData data = event.getFormData();
- final String nameValue = data.getString(MODEL_NAME);
- final String titleValue = data.getString(MODEL_TITLE);
- final String appValue = data.getString(MODEL_APPLICATION);
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
- final boolean modelEditedOrNew;
-
- if (selectedModelIdStr == null || selectedModelIdStr.isEmpty()) {
- modelEditedOrNew = true;
- } else {
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ConfigurationManager confManager = cdiUtil
- .findBean(ConfigurationManager.class);
- final PageModelRepository pageModelRepo = cdiUtil
- .findBean(PageModelRepository.class);
- final PageModel pageModel = pageModelRepo
- .findById(Long.parseLong(selectedModelIdStr))
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %s in the database.",
- selectedModelIdStr)));
-
- final KernelConfig kernelConfig = confManager
- .findConfiguration(KernelConfig.class);
-
- final boolean nameEdited = !pageModel
- .getName()
- .equals(nameValue);
- final boolean titleEdited = !pageModel
- .getTitle()
- .getValue(kernelConfig.getDefaultLocale())
- .equals(titleValue);
- final boolean appEdited = !pageModel
- .getApplication()
- .getPrimaryUrl()
- .equals(appValue);
-
- modelEditedOrNew = nameEdited || titleEdited || appEdited;
- }
-
- if (modelEditedOrNew) {
- if (nameValue == null
- || nameValue.isEmpty()
- || nameValue.matches("\\s*")) {
-
- data.addError(MODEL_NAME,
- new GlobalizedMessage(
- "ui.admin.pagemodels.name.error.empty",
- AdminUiConstants.ADMIN_BUNDLE));
- }
-
- if (titleValue == null
- || titleValue.isEmpty()
- || titleValue.matches("\\s*")) {
-
- data.addError(MODEL_TITLE,
- new GlobalizedMessage(
- "ui.admin.pagemodels.title.error.empty",
- AdminUiConstants.ADMIN_BUNDLE));
- }
-
- if (appValue == null
- || appValue.isEmpty()
- || appValue.matches("\\s*")) {
-
- data.addError(MODEL_TITLE,
- new GlobalizedMessage(
- "ui.admin.pagemodels.application.error.empty",
- AdminUiConstants.ADMIN_BUNDLE));
- } else {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ApplicationRepository appRepo = cdiUtil
- .findBean(ApplicationRepository.class);
-
- final Optional application = appRepo
- .retrieveApplicationForPath(appValue);
-
- if (!application.isPresent()) {
- data.addError(MODEL_TITLE,
- new GlobalizedMessage(
- "ui.admin.pagemodels.application.error.invalid",
- AdminUiConstants.ADMIN_BUNDLE));
- }
-
- }
- }
-
- }
- }
-
- }
-
- private class InitListener implements FormInitListener {
-
- @Override
- public void init(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
-
- if (selectedModelIdStr != null && !selectedModelIdStr.isEmpty()) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelRepository pageModelRepo = cdiUtil
- .findBean(PageModelRepository.class);
- final ConfigurationManager confManager = cdiUtil
- .findBean(ConfigurationManager.class);
- final KernelConfig kernelConfig = confManager
- .findConfiguration(KernelConfig.class);
- final Locale defaultLocale = kernelConfig.getDefaultLocale();
-
- final PageModel pageModel = pageModelRepo
- .findById(Long.parseLong(selectedModelIdStr))
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %s in the database.",
- selectedModelIdStr)));
-
- nameField.setValue(state, pageModel.getName());
- titleField.setValue(state,
- pageModel.getTitle().getValue(defaultLocale));
- descArea
- .setValue(state,
- pageModel.getDescription().getValue(defaultLocale));
- applicationSelect
- .setValue(state,
- pageModel.getApplication().getPrimaryUrl());
- }
- }
-
- }
-
- private class ProcessListener implements FormProcessListener {
-
- @Override
- public void process(final FormSectionEvent event)
- throws FormProcessException {
-
- final PageState state = event.getPageState();
-
- if (saveCancelSection.getSaveButton().isSelected(state)) {
-
- final FormData data = event.getFormData();
-
- final String nameValue = data.getString(MODEL_NAME);
- final String titleValue = data.getString(MODEL_TITLE);
- final String descValue = data.getString(MODEL_DESC);
- final String appValue = data.getString(MODEL_APPLICATION);
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelRepository pageModelRepo = cdiUtil
- .findBean(PageModelRepository.class);
- final PageModelManager pageModelManager = cdiUtil
- .findBean(PageModelManager.class);
- final ConfigurationManager confManager = cdiUtil
- .findBean(ConfigurationManager.class);
- final ApplicationRepository appRepo = cdiUtil
- .findBean(ApplicationRepository.class);
- final KernelConfig kernelConfig = confManager
- .findConfiguration(KernelConfig.class);
- final Locale defaultLocale = kernelConfig.getDefaultLocale();
-
- final String selectedModelIdStr = selectedModelId
- .getSelectedKey(state);
-
- final CcmApplication application = appRepo
- .retrieveApplicationForPath(appValue)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No CcmApplication with primary URL \"%s\" in the "
- + "database.",
- appValue)));
-
- final PageModel pageModel;
- if (selectedModelIdStr == null || selectedModelIdStr.isEmpty()) {
- pageModel = pageModelManager.createPageModel(nameValue,
- application);
- } else {
- pageModel = pageModelRepo
- .findById(Long.parseLong(selectedModelIdStr))
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %s in the database.",
- selectedModelIdStr)));
- }
-
- pageModel.setName(nameValue);
-
- pageModel.getTitle().putValue(defaultLocale, titleValue);
- pageModel.getDescription().putValue(defaultLocale, descValue);
-
- pageModel.setApplication(application);
-
- pageModelRepo.save(pageModel);
- }
-
- pageModelTab.showPageModelsTable(state);
- }
-
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModel.java
deleted file mode 100644
index 92bb0f613..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModel.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.PropertySheetModel;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.kernel.KernelConfig;
-import com.arsdigita.ui.admin.AdminUiConstants;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.configuration.ConfigurationManager;
-import org.libreccm.pagemodel.PageModel;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Locale;
-
-/**
- * Implementation of {@link PropertySheetModel} for the the property sheet used
- * in {@link PageModelDetails} for displaying the basic properties of a
- * {@link PageModel}.
- *
- * @author Jens Pelzetter
- */
-class PageModelPropertySheetModel implements PropertySheetModel {
-
- private static enum PageModelProperty {
- MODEL_NAME,
- MODEL_TITLE,
- MODEL_APPLICATION,
- MODEL_DESC
- }
-
- private final PageModel pageModel;
- private final Iterator propertyIterator;
- private PageModelProperty currentProperty;
-
- public PageModelPropertySheetModel(final PageModel pageModel) {
-
- this.pageModel = pageModel;
- propertyIterator = Arrays
- .asList(PageModelProperty.values())
- .iterator();
- }
-
- @Override
- public boolean nextRow() {
- if (pageModel == null) {
- return false;
- }
-
- if (propertyIterator.hasNext()) {
- currentProperty = propertyIterator.next();
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public String getLabel() {
- return currentProperty.toString();
- }
-
- @Override
- public GlobalizedMessage getGlobalizedLabel() {
-
- final String key = String
- .join("",
- "ui.admin.pagemodels.details.",
- currentProperty.toString().toLowerCase());
- return new GlobalizedMessage(key, AdminUiConstants.ADMIN_BUNDLE);
- }
-
- @Override
- public String getValue() {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final ConfigurationManager confManager = cdiUtil
- .findBean(ConfigurationManager.class);
- final KernelConfig kernelConfig = confManager
- .findConfiguration(KernelConfig.class);
- final Locale defaultLocale = kernelConfig.getDefaultLocale();
-
- switch (currentProperty) {
- case MODEL_APPLICATION:
- return pageModel.getApplication().getPrimaryUrl();
- case MODEL_DESC:
- return pageModel.getDescription().getValue(defaultLocale);
- case MODEL_NAME:
- return pageModel.getName();
- case MODEL_TITLE:
- return pageModel.getTitle().getValue(defaultLocale);
- default:
- return "";
- }
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModelBuilder.java
deleted file mode 100644
index 6d45bf259..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelPropertySheetModelBuilder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-import com.arsdigita.bebop.PropertySheet;
-import com.arsdigita.bebop.PropertySheetModel;
-import com.arsdigita.bebop.PropertySheetModelBuilder;
-import com.arsdigita.util.LockableImpl;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.pagemodel.PageModel;
-import org.libreccm.pagemodel.PageModelRepository;
-
-/**
- * Implementation of {@link PropertySheetModelBuilder} for the the property
- * sheet used in {@link PageModelDetails} for displaying the basic properties of
- * a {@link PageModel}.
- *
- * @author Jens Pelzetter
- */
-class PageModelPropertySheetModelBuilder
- extends LockableImpl
- implements com.arsdigita.bebop.PropertySheetModelBuilder {
-
- private final ParameterSingleSelectionModel selectedModelId;
-
- public PageModelPropertySheetModelBuilder(
- final ParameterSingleSelectionModel selectedModelId) {
-
- this.selectedModelId = selectedModelId;
- }
-
- @Override
- public PropertySheetModel makeModel(final PropertySheet sheet,
- final PageState state) {
-
- final String selectedModelIdStr = selectedModelId.getSelectedKey(
- state);
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelRepository pageModelRepo = cdiUtil
- .findBean(PageModelRepository.class);
- final PageModel pageModel = pageModelRepo
- .findById(Long.parseLong(selectedModelIdStr))
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %s in the database.",
- selectedModelIdStr)));
-
- return new PageModelPropertySheetModel(pageModel);
- }
-
-}
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
deleted file mode 100644
index 8375f43ed..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsController.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.Form;
-
-import org.libreccm.l10n.GlobalizationHelper;
-import org.libreccm.pagemodel.ComponentModel;
-import org.libreccm.pagemodel.ComponentModelRepository;
-import org.libreccm.pagemodel.ComponentModels;
-import org.libreccm.pagemodel.PageModel;
-import org.libreccm.pagemodel.PageModelComponentModel;
-import org.libreccm.pagemodel.PageModelManager;
-import org.libreccm.pagemodel.PageModelRepository;
-import org.libreccm.web.ApplicationRepository;
-import org.libreccm.web.CcmApplication;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.ResourceBundle;
-import java.util.stream.Collectors;
-
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Inject;
-import javax.transaction.Transactional;
-
-/**
- * CDI bean encapsulating some actions for the components of the
- * {@link PageModelTab}.
- *
- * @author Jens Pelzetter
- */
-@RequestScoped
-class PageModelsController implements Serializable {
-
- private static final long serialVersionUID = -5105462163244688201L;
-
- @Inject
- private ApplicationRepository applicationRepo;
-
- @Inject
- private ComponentModelRepository componentModelRepo;
-
- @Inject
- private ComponentModels componentModels;
-
- @Inject
- private GlobalizationHelper globalizationHelper;
-
- @Inject
- private PageModelManager pageModelManager;
-
- @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() {
-
- return pageModelRepo
- .findAllDraftModels()
- .stream()
- .map(this::buildRow)
- .sorted()
- .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) {
-
- final CcmApplication application = applicationRepo
- .findById(applicationId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No CcmApplication with ID %d in the database.",
- applicationId)));
-
- return !pageModelRepo
- .findLiveByApplicationAndName(application, name)
- .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) {
-
- final PageModel model = pageModelRepo
- .findById(pageModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %d in the database.",
- pageModelId)));
-
- 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();
-
- row.setModelId(model.getPageModelId());
- row.setName(model.getName());
- row.setTitle(globalizationHelper
- .getValueFromLocalizedString(model.getTitle()));
- row.setDescription(globalizationHelper
- .getValueFromLocalizedString(model.getDescription()));
- row.setApplicationName(model.getApplication().getPrimaryUrl());
- row.setLive(pageModelManager.isLive(model));
-
- 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) {
-
- final Optional info = componentModels
- .getComponentModelInfo(clazz);
-
- if (info.isPresent()) {
- final ResourceBundle bundle = ResourceBundle
- .getBundle(info.get().descBundle());
-
- return bundle.getString(info.get().titleKey());
- } else {
- return clazz.getName();
- }
- }
-
- /**
- * 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) {
-
- final ComponentModel componentModel = componentModelRepo
- .findById(componentModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No ComponentModel with ID %d in the database.",
- componentModelId)));
-
- final Class extends ComponentModel> clazz = componentModel
- .getClass();
-
- 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) {
-
- Objects.requireNonNull(clazz);
-
- final Optional info = componentModels
- .getComponentModelInfo(clazz);
-
- return info
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No data about ComponentModel class \"%s\" available.",
- clazz.getName())))
- .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) {
-
- final PageModel model = pageModelRepo
- .findById(pageModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %d in the database.",
- pageModelId)));
-
- final List components = new ArrayList<>();
-// ToDo
-// for (final ComponentModel component : model.getComponents()) {
-// components.add(component);
-// }
- 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) {
-
- final PageModel model = pageModelRepo
- .findById(pageModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %d in the database.",
- pageModelId)));
-
-// ToDo
-// pageModelManager.addComponentModel(model, componentModel);
-
- }
-
- /**
- * 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) {
-
- final PageModel model = pageModelRepo
- .findById(pageModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No PageModel with ID %d in the database.",
- pageModelId)));
-
- final ComponentModel componentModel = componentModelRepo
- .findById(componentModelId)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No ComponentModel with ID %d in the database.",
- componentModelId)));
-
-// ToDo
-// pageModelManager.removeComponentModel(model, componentModel);
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTab.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTab.java
deleted file mode 100644
index 3eb35cb55..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTab.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.ActionLink;
-import com.arsdigita.bebop.BoxPanel;
-import com.arsdigita.bebop.Form;
-import com.arsdigita.bebop.MetaForm;
-import com.arsdigita.bebop.Page;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-import com.arsdigita.bebop.parameters.StringParameter;
-import com.arsdigita.globalization.GlobalizedMessage;
-import com.arsdigita.toolbox.ui.LayoutPanel;
-import com.arsdigita.ui.admin.AdminUiConstants;
-
-import org.libreccm.cdi.utils.CdiUtil;
-import org.libreccm.core.UnexpectedErrorException;
-import org.libreccm.pagemodel.ComponentModel;
-
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * Tab for {@code /ccm/admin} for managing {@link PageModel}s.
- *
- * @author Jens Pelzetter
- */
-public class PageModelsTab extends LayoutPanel {
-
- private final ParameterSingleSelectionModel selectedModelId;
- private final ParameterSingleSelectionModel selectedComponentId;
- private final ActionLink addNewModel;
- private final PageModelsTable pageModelsTable;
- private final PageModelDetails pageModelDetails;
- private final PageModelForm pageModelForm;
- private final MetaForm componentForm;
-
- private Class extends ComponentModel> componentModelClass;
-
- public PageModelsTab() {
-
- super();
-
- super.setClassAttr("sidebarNavPanel");
-
- final BoxPanel left = new BoxPanel(BoxPanel.VERTICAL);
-
- selectedModelId = new ParameterSingleSelectionModel<>(
- new StringParameter("selected_pagemodel_id"));
- selectedComponentId = new ParameterSingleSelectionModel<>(
- new StringParameter(("selected_pagemodel_component_id")));
-
- pageModelsTable = new PageModelsTable(this, selectedModelId);
- pageModelDetails = new PageModelDetails(this,
- selectedModelId,
- selectedComponentId);
- pageModelForm = new PageModelForm(this, selectedModelId);
-
- addNewModel = new ActionLink(new GlobalizedMessage(
- "ui.admin.pagemodels.add_new_pagemodel_link",
- AdminUiConstants.ADMIN_BUNDLE));
- addNewModel.addActionListener(event -> {
- showPageModelForm(event.getPageState());
- });
-
- componentForm = new MetaForm("componentsForm") {
-
- @Override
- public Form buildForm(final PageState state) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
-
- try {
- final Class extends Form> formClass;
- if (selectedComponentId.getSelectedKey(state) == null
- || selectedComponentId.getSelectedKey(state)
- .isEmpty()) {
- formClass = controller
- .getComponentModelForm(componentModelClass);
- } else {
- formClass = controller
- .getComponentModelForm(Long
- .parseLong(selectedComponentId
- .getSelectedKey(state)));
- }
- return formClass
- .getDeclaredConstructor(PageModelsTab.class,
- ParameterSingleSelectionModel.class,
- ParameterSingleSelectionModel.class)
- .newInstance(PageModelsTab.this,
- selectedModelId,
- selectedComponentId);
- } catch (InstantiationException
- | InvocationTargetException
- | IllegalAccessException
- | NoSuchMethodException ex) {
- throw new UnexpectedErrorException(ex);
- }
- }
- };
-
- final BoxPanel right = new BoxPanel(BoxPanel.VERTICAL);
- right.add(addNewModel);
- right.add(pageModelsTable);
- right.add(pageModelDetails);
- right.add(pageModelForm);
- right.add(componentForm);
-
- setLeft(left);
- setRight(right);
- }
-
- @Override
- public void register(final Page page) {
-
- super.register(page);
-
- page.addGlobalStateParam(selectedModelId.getStateParameter());
- page.addGlobalStateParam(selectedComponentId.getStateParameter());
-
- page.setVisibleDefault(addNewModel, true);
- page.setVisibleDefault(pageModelsTable, true);
- page.setVisibleDefault(pageModelDetails, false);
- page.setVisibleDefault(pageModelForm, false);
- page.setVisibleDefault(componentForm, false);
- }
-
- protected void showNewComponentForm(
- final PageState state,
- final Class extends ComponentModel> componentModelClass) {
-
- this.componentModelClass = componentModelClass;
- showComponentForm(state);
-
- }
-
- protected void showComponentForm(final PageState state) {
- addNewModel.setVisible(state, false);
- pageModelsTable.setVisible(state, false);
- pageModelDetails.setVisible(state, false);
- pageModelForm.setVisible(state, false);
- componentForm.setVisible(state, true);
- }
-
- protected void showPageModelDetails(final PageState state) {
- addNewModel.setVisible(state, false);
- pageModelsTable.setVisible(state, false);
- pageModelDetails.setVisible(state, true);
- pageModelForm.setVisible(state, false);
- componentForm.setVisible(state, false);
- }
-
- protected void showPageModelForm(final PageState state) {
- addNewModel.setVisible(state, false);
- pageModelsTable.setVisible(state, false);
- pageModelDetails.setVisible(state, false);
- pageModelForm.setVisible(state, true);
- componentForm.setVisible(state, false);
- }
-
- protected void showPageModelsTable(final PageState state) {
- addNewModel.setVisible(state, true);
- pageModelsTable.setVisible(state, true);
- pageModelDetails.setVisible(state, false);
- pageModelForm.setVisible(state, false);
- componentForm.setVisible(state, false);
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTable.java
deleted file mode 100644
index 3bd8f3830..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTable.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import com.arsdigita.bebop.Component;
-import com.arsdigita.bebop.ControlLink;
-import com.arsdigita.bebop.FormProcessException;
-import com.arsdigita.bebop.Label;
-import com.arsdigita.bebop.PageState;
-import com.arsdigita.bebop.ParameterSingleSelectionModel;
-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.globalization.GlobalizedMessage;
-import com.arsdigita.ui.admin.AdminUiConstants;
-import com.arsdigita.util.LockableImpl;
-
-import org.libreccm.cdi.utils.CdiUtil;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Table showing all available {@link PageModels}.
- *
- * @author Jens Pelzetter
- */
-class PageModelsTable extends Table {
-
- public static final int COL_MODEL_APPLICATION = 0;
- public static final int COL_MODEL_NAME = 1;
- public static final int COL_MODEL_TITLE = 2;
- public static final int COL_MODEL_DESC = 3;
- public static final int COL_REMOVE = 4;
-
- public PageModelsTable(
- final PageModelsTab parent,
- final ParameterSingleSelectionModel selectedPageModelId) {
-
- super();
-
- super.setIdAttr("pageModelsTable");
- super.setStyleAttr("wdith: 30em");
-
- setEmptyView(new Label(
- new GlobalizedMessage("ui.admin.pagemodels.table.empty_view",
- AdminUiConstants.ADMIN_BUNDLE)));
-
- final TableColumnModel columnModel = getColumnModel();
- columnModel.add(new TableColumn(
- COL_MODEL_APPLICATION,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.headers.application",
- AdminUiConstants.ADMIN_BUNDLE))
- ));
- columnModel.add(new TableColumn(
- COL_MODEL_NAME,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.headers.name",
- AdminUiConstants.ADMIN_BUNDLE))
- ));
- columnModel.add(new TableColumn(
- COL_MODEL_TITLE,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.headers.title",
- AdminUiConstants.ADMIN_BUNDLE))
- ));
- columnModel.add(new TableColumn(
- COL_MODEL_DESC,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.headers.desc",
- AdminUiConstants.ADMIN_BUNDLE))
- ));
- columnModel.add(new TableColumn(
- COL_REMOVE,
- new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.headers.remove",
- AdminUiConstants.ADMIN_BUNDLE))
- ));
-
- columnModel
- .get(COL_MODEL_NAME)
- .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) {
-
- return new ControlLink((String) value);
- }
-
- });
-
- columnModel
- .get(COL_REMOVE)
- .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) {
-
- if (value == null) {
- return new Text("");
- } else {
- final ControlLink link = new ControlLink(
- (Component) value);
- link.setConfirmation(new GlobalizedMessage(
- "ui.admin.pagemodels.delete.confirm",
- 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 key = (String) event.getRowKey();
-
- switch (event.getColumn()) {
- case COL_MODEL_NAME:
- selectedPageModelId.setSelectedKey(state, key);
- parent.showPageModelDetails(state);
- break;
- case COL_REMOVE:
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
- controller.deletePageModel(Long.parseLong(key));
- break;
- default:
- throw new IllegalArgumentException(
- "Invalid value for column.");
- }
- }
-
- @Override
- public void headSelected(final TableActionEvent event) {
-
- // Nothing
- }
-
- });
-
- super.setModelBuilder(new PageModelsTableModelBuilder());
- }
-
- private class PageModelsTableModelBuilder
- extends LockableImpl
- implements TableModelBuilder {
-
- @Override
- public TableModel makeModel(final Table table,
- final PageState state) {
-
- final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
- final PageModelsController controller = cdiUtil
- .findBean(PageModelsController.class);
- return new PageModelsTableModel(controller.findPageModels());
- }
-
- }
-
- private class PageModelsTableModel implements TableModel {
-
- private final Iterator iterator;
- private PageModelsTableRow currentRow;
-
- public PageModelsTableModel(final List rows) {
- iterator = rows.iterator();
- }
-
- @Override
- public int getColumnCount() {
- return 5;
- }
-
- @Override
- public boolean nextRow() {
-
- if (iterator.hasNext()) {
- currentRow = iterator.next();
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public Object getElementAt(final int columnIndex) {
-
- switch (columnIndex) {
- case COL_MODEL_APPLICATION:
- return currentRow.getApplicationName();
- case COL_MODEL_DESC:
- return currentRow.getDescription();
- case COL_MODEL_NAME:
- return currentRow.getName();
- case COL_MODEL_TITLE:
- return currentRow.getTitle();
- case COL_REMOVE:
- return new Label(new GlobalizedMessage(
- "ui.admin.pagemodels.table.columns.remove.label",
- AdminUiConstants.ADMIN_BUNDLE));
- default:
- throw new IllegalArgumentException("No a valid column index");
- }
- }
-
- @Override
- public Object getKeyAt(final int columnIndex) {
-
- return currentRow.getModelId();
- }
-
- }
-
-}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTableRow.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTableRow.java
deleted file mode 100644
index c555a4e7d..000000000
--- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelsTableRow.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2017 LibreCCM Foundation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-package com.arsdigita.ui.admin.pagemodels;
-
-import java.io.Serializable;
-
-/**
- * Data for one row of the {@link PageModelsTable}.
- *
- * @author Jens Pelzetter
- */
-class PageModelsTableRow implements Comparable,
- Serializable {
-
- private static final long serialVersionUID = 7497498047332094014L;
-
- private long modelId;
-
- private String name;
-
- private boolean live;
-
- private String title;
-
- private String description;
-
- private String applicationName;
-
- public long getModelId() {
- return modelId;
- }
-
- public void setModelId(final long modelId) {
- this.modelId = modelId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- public boolean isLive() {
- return live;
- }
-
- public void setLive(final boolean live) {
- this.live = live;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(final String title) {
- this.title = title;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(final String description) {
- this.description = description;
- }
-
- public String getApplicationName() {
- return applicationName;
- }
-
- public void setApplicationName(final String applicationName) {
- this.applicationName = applicationName;
- }
-
- @Override
- public int compareTo(final PageModelsTableRow other) {
-
- int result;
-
- result = applicationName.compareTo(other.getApplicationName());
- if (result != 0) {
- return result;
- }
-
- result = name.compareTo(other.getName());
- if (result != 0) {
- return result;
- }
-
- return title.compareTo(other.getTitle());
- }
-
-}