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