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: - *
    - *
  1. The {@link PageModelsTab} in which the form is displayed.
  2. - *
  3. The {@link ParameterSingleSelectionModel} which holds the ID of the - * currently selected {@link PageModel}.
  4. - *
  5. 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.
  6. - *
- * - * @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 clazz = getClass(type); - - pageModelTab.showNewComponentForm(state, clazz); - } - - @SuppressWarnings("unchecked") - private Class getClass(final String type) { - try { - return (Class) 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 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 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 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 getComponentModelForm( - final Class 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 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 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 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()); - } - -}