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
pull/2/head
jensp 2017-11-27 10:54:13 +00:00
parent b0b873ecd1
commit 57a473df20
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,6 +37,7 @@ 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;
@ -55,14 +55,41 @@ class ComponentsTable extends Table {
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;
public ComponentsTable( /**
final PageModelsTab pageModelTab, * 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;
/**
* 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",
AdminUiConstants.ADMIN_BUNDLE))); AdminUiConstants.ADMIN_BUNDLE)));
@ -89,29 +116,102 @@ 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(
// 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 PageState state,
final Object value, final Object value,
final boolean isSelected, final boolean isSelected,
final Object key, final Object key,
final int row, final int row,
final int column) { final int columnv) {
final ControlLink link = new ControlLink((Component) value); final ControlLink link = new ControlLink((Component) value);
return link; return link;
} }
}); private Component renderDeleteCell(final Table table,
columnModel.get(COL_DELETE).setCellRenderer(
new TableCellRenderer() {
@Override
public Component getComponent(final Table table,
final PageState state, final PageState state,
final Object value, final Object value,
final boolean isSelected, final boolean isSelected,
@ -126,9 +226,7 @@ class ComponentsTable extends Table {
return link; return link;
} }
}); private class ComponentsTableActionListener implements TableActionListener {
super.addTableActionListener(new TableActionListener() {
@Override @Override
public void cellSelected(final TableActionEvent event) public void cellSelected(final TableActionEvent event)
@ -142,7 +240,7 @@ class ComponentsTable extends Table {
switch (event.getColumn()) { switch (event.getColumn()) {
case COL_EDIT: case COL_EDIT:
selectedComponentId.setSelectedKey(state, key); selectedComponentId.setSelectedKey(state, key);
pageModelTab.showComponentForm(state); pageModelsTab.showComponentForm(state);
break; break;
case COL_DELETE: case COL_DELETE:
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
@ -163,10 +261,6 @@ class ComponentsTable extends Table {
//Nothing //Nothing
} }
});
super.setModelBuilder(new ComponentsTableModelBuilder(
selectedModelId));
} }
private class ComponentsTableModelBuilder private class ComponentsTableModelBuilder

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) {