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

Former-commit-id: c216ec394e
pull/2/head
jensp 2017-11-27 10:54:13 +00:00
parent 45fee82ae7
commit 1cf4e051de
2 changed files with 250 additions and 78 deletions

View File

@ -27,7 +27,6 @@ import com.arsdigita.bebop.ParameterSingleSelectionModel;
import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent; import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel; import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel; import com.arsdigita.bebop.table.TableModel;
@ -38,14 +37,15 @@ import com.arsdigita.util.LockableImpl;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.pagemodel.ComponentModel; import org.libreccm.pagemodel.ComponentModel;
import org.libreccm.pagemodel.PageModel;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; 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}. * assigned to a {@link PageModel}.
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
class ComponentsTable extends Table { 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_COMPONENT_TYPE = 1;
protected static final int COL_EDIT = 2; protected static final int COL_EDIT = 2;
protected static final int COL_DELETE = 3; 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<String> selectedModelId;
/**
* The selection model for the ID of the selected component.
*/
private final ParameterSingleSelectionModel<String> 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<String> selectedModelId, final ParameterSingleSelectionModel<String> selectedModelId,
final ParameterSingleSelectionModel<String> selectedComponentId) { final ParameterSingleSelectionModel<String> selectedComponentId) {
super(); super();
super.setIdAttr("pageModelComponentModelsTable"); super.setIdAttr("pageModelComponentModelsTable");
this.pageModelsTab = pageModelsTab;
this.selectedModelId = selectedModelId;
this.selectedComponentId = selectedComponentId;
super.setEmptyView(new Label(new GlobalizedMessage( super.setEmptyView(new Label(new GlobalizedMessage(
"ui.admin.pagemodels.componentmodels.none", "ui.admin.pagemodels.componentmodels.none",
@ -89,86 +116,153 @@ class ComponentsTable extends Table {
"ui.admin.pagemodels.componentmodels.cols.delete.heading", "ui.admin.pagemodels.componentmodels.cols.delete.heading",
AdminUiConstants.ADMIN_BUNDLE)))); AdminUiConstants.ADMIN_BUNDLE))));
columnModel.get(COL_EDIT).setCellRenderer( columnModel.get(COL_EDIT).setCellRenderer(this::renderEditCell);
new TableCellRenderer() { // 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 columnModel.get(COL_DELETE).setCellRenderer(this::renderDeleteCell);
public Component getComponent(final Table table, // columnModel.get(COL_DELETE).setCellRenderer(
final PageState state, // new TableCellRenderer() {
final Object value, //
final boolean isSelected, // @Override
final Object key, // public Component getComponent(final Table table,
final int row, // final PageState state,
final int column) { // 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); super.addTableActionListener(new ComponentsTableActionListener());
return link; // super.addTableActionListener(new TableActionListener() {
} //
// @Override
}); // public void cellSelected(final TableActionEvent event)
// throws FormProcessException {
columnModel.get(COL_DELETE).setCellRenderer( //
new TableCellRenderer() { // final PageState state = event.getPageState();
// final String selectedModelIdStr = selectedModelId
@Override // .getSelectedKey(state);
public Component getComponent(final Table table, // final String key = (String) event.getRowKey();
final PageState state, //
final Object value, // switch (event.getColumn()) {
final boolean isSelected, // case COL_EDIT:
final Object key, // selectedComponentId.setSelectedKey(state, key);
final int row, // pageModelsTab.showComponentForm(state);
final int column) { // break;
// case COL_DELETE:
final ControlLink link = new ControlLink((Component) value); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
link.setConfirmation(new GlobalizedMessage( // final PageModelsController controller = cdiUtil
"ui.admin.pagemodels.componentmodels.cols.delete.confirmation", // .findBean(PageModelsController.class);
AdminUiConstants.ADMIN_BUNDLE)); // controller.removeComponentModel(
return link; // Long.parseLong(selectedModelIdStr),
} // Long.parseLong(key));
// break;
}); // default:
// throw new IllegalArgumentException(
super.addTableActionListener(new TableActionListener() { // "Invalid value for column");
// }
@Override // }
public void cellSelected(final TableActionEvent event) //
throws FormProcessException { // @Override
// public void headSelected(final TableActionEvent event) {
final PageState state = event.getPageState(); // //Nothing
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.setModelBuilder(new ComponentsTableModelBuilder( super.setModelBuilder(new ComponentsTableModelBuilder(
selectedModelId)); 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 private class ComponentsTableModelBuilder
extends LockableImpl extends LockableImpl
implements TableModelBuilder { implements TableModelBuilder {

View File

@ -72,6 +72,12 @@ class PageModelsController implements Serializable {
@Inject @Inject
private PageModelRepository pageModelRepo; 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) @Transactional(Transactional.TxType.REQUIRED)
protected List<PageModelsTableRow> findPageModels() { protected List<PageModelsTableRow> findPageModels() {
@ -83,6 +89,15 @@ class PageModelsController implements Serializable {
.collect(Collectors.toList()); .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) @Transactional(Transactional.TxType.REQUIRED)
protected boolean isUnique(final long applicationId, protected boolean isUnique(final long applicationId,
final String name) { final String name) {
@ -98,6 +113,11 @@ class PageModelsController implements Serializable {
.isPresent(); .isPresent();
} }
/**
* Deletes a {@link PageModel}.
*
* @param pageModelId The ID of the {@link PageModel} to delete.
*/
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
protected void deletePageModel(final long pageModelId) { protected void deletePageModel(final long pageModelId) {
@ -110,6 +130,16 @@ class PageModelsController implements Serializable {
pageModelRepo.delete(model); 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) { private PageModelsTableRow buildRow(final PageModel model) {
final PageModelsTableRow row = new PageModelsTableRow(); final PageModelsTableRow row = new PageModelsTableRow();
@ -126,6 +156,13 @@ class PageModelsController implements Serializable {
return row; 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( protected String getComponentModelTitle(
final Class<? extends ComponentModel> clazz) { final Class<? extends ComponentModel> clazz) {
@ -142,6 +179,14 @@ class PageModelsController implements Serializable {
} }
} }
/**
* Retrieves the form for editing a {@link ComponentModel}.
*
* @param componentModelId The ID of the {@link ComponentModel} instance.
*
* @return The form for editing the properties of the {@link ComponentModel}
* instance.
*/
protected Class<? extends Form> getComponentModelForm( protected Class<? extends Form> getComponentModelForm(
final long componentModelId) { final long componentModelId) {
@ -157,6 +202,14 @@ class PageModelsController implements Serializable {
return getComponentModelForm(clazz); 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( protected Class<? extends Form> getComponentModelForm(
final Class<? extends ComponentModel> clazz) { final Class<? extends ComponentModel> clazz) {
@ -172,6 +225,15 @@ class PageModelsController implements Serializable {
.editor(); .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) @Transactional(Transactional.TxType.REQUIRED)
protected List<ComponentModel> retrieveComponents(final long pageModelId) { protected List<ComponentModel> retrieveComponents(final long pageModelId) {
@ -188,6 +250,14 @@ class PageModelsController implements Serializable {
return components; 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) @Transactional(Transactional.TxType.REQUIRED)
protected void addComponentModel(final long pageModelId, protected void addComponentModel(final long pageModelId,
final ComponentModel componentModel) { 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) @Transactional(Transactional.TxType.REQUIRED)
protected void removeComponentModel(final long pageModelId, protected void removeComponentModel(final long pageModelId,
final long componentModelId) { final long componentModelId) {