From a45a5513397bab38e301dd81bca598d7113a975f Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 22 Nov 2017 11:07:35 +0000 Subject: [PATCH] CCM NG: PageModel AdminUI should now work git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5130 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: c0352bbb43dfe2eaecea535b4c39662ad3e0c9aa --- .../AbstractContentItemComponentForm.java | 16 +++--- .../pagemodel/CategoryTreeComponentForm.java | 6 +-- .../AbstractComponentModelForm.java | 36 ++++++------- .../ui/admin/pagemodels/ComponentsTable.java | 9 +++- .../ui/admin/pagemodels/PageModelTab.java | 33 ++++++------ .../pagemodels/PageModelsController.java | 54 ++++++++++++++++--- .../libreccm/pagemodel/ComponentModels.java | 37 ++++++++++--- 7 files changed, 127 insertions(+), 64 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/AbstractContentItemComponentForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/AbstractContentItemComponentForm.java index fe56e87f3..714027af2 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/AbstractContentItemComponentForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/AbstractContentItemComponentForm.java @@ -59,7 +59,7 @@ public abstract class AbstractContentItemComponentForm this.selectedModelId = selectedModelId; this.selectedComponentId = selectedComponentId; - keyField = new TextField(COMPONENT_KEY); - keyField.setLabel(new GlobalizedMessage( - "ui.admin.pagemodels.components.key.label", - AdminUiConstants.ADMIN_BUNDLE)); - super.add(keyField); +// keyField = new TextField(COMPONENT_KEY); +// keyField.setLabel(new GlobalizedMessage( +// "ui.admin.pagemodels.components.key.label", +// AdminUiConstants.ADMIN_BUNDLE)); +// super.add(keyField); + createWidgets(); - addBasicWidgets(); + super.addInitListener(this); + super.addValidationListener(this); + super.addProcessListener(this); } - private void addBasicWidgets() { - keyField = new TextField("componentModelKey"); + private void createWidgets() { + keyField = new TextField(COMPONENT_KEY); keyField.setLabel(new GlobalizedMessage( "ui.admin.pagemodels.components.key.label", AdminUiConstants.ADMIN_BUNDLE)); @@ -133,7 +136,7 @@ public abstract class AbstractComponentModelForm protected final SaveCancelSection getSaveCancelSection() { return saveCancelSection; } - + protected final T getComponentModel() { return componentModel; } @@ -226,10 +229,8 @@ public abstract class AbstractComponentModelForm .getSelectedKey(state); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PageModelRepository pageModelRepo = cdiUtil - .findBean(PageModelRepository.class); - final PageModelManager pageModelManager = cdiUtil - .findBean(PageModelManager.class); + final PageModelsController controller = cdiUtil + .findBean(PageModelsController.class); final FormData data = event.getFormData(); final String keyValue = data.getString(COMPONENT_KEY); @@ -241,13 +242,8 @@ public abstract class AbstractComponentModelForm componentModel.setKey(keyValue); updateComponentModel(componentModel, state, data); - final PageModel pageModel = pageModelRepo - .findById(Long.parseLong(selectedModelIdStr)) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No PageModel with ID %s in the database.", - selectedModelIdStr))); - - pageModelManager.addComponentModel(pageModel, componentModel); + controller.addComponentModel(Long.parseLong(selectedModelIdStr), + componentModel); } else { componentModel = retrieveComponentModel(selectedComponentIdStr); 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 daf9a35be..070ad2902 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 @@ -231,8 +231,13 @@ class ComponentsTable extends Table { switch (columnIndex) { case ComponentsTable.COL_COMPONENT_KEY: return currentComponent.getKey(); - case ComponentsTable.COL_COMPONENT_TYPE: - return currentComponent.getClass().getName(); + 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", diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelTab.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelTab.java index 9c30c4dca..2623709ba 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelTab.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/pagemodels/PageModelTab.java @@ -88,37 +88,33 @@ public class PageModelTab extends LayoutPanel { .findBean(PageModelsController.class); try { + final Class formClass; if (selectedComponentId.getSelectedKey(state) == null || selectedComponentId.getSelectedKey(state) .isEmpty()) { - - final Class formClass = controller + formClass = controller .getComponentModelForm(componentModelClass); - formClass - .getDeclaredConstructor() - .newInstance(); } else { - - final Class formClass = controller + formClass = controller .getComponentModelForm(Long .parseLong(selectedComponentId .getSelectedKey(state))); - - return formClass - .getDeclaredConstructor( - ParameterSingleSelectionModel.class) - .newInstance(selectedComponentId); } + return formClass + .getDeclaredConstructor( + PageModelTab.class, + ParameterSingleSelectionModel.class, + ParameterSingleSelectionModel.class) + .newInstance(PageModelTab.this, + selectedModelId, + selectedComponentId); } catch (InstantiationException - | InvocationTargetException - | IllegalAccessException - | NoSuchMethodException ex) { + | InvocationTargetException + | IllegalAccessException + | NoSuchMethodException ex) { throw new UnexpectedErrorException(ex); } - - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - }; final BoxPanel right = new BoxPanel(BoxPanel.VERTICAL); @@ -138,6 +134,7 @@ public class PageModelTab extends LayoutPanel { super.register(page); page.addGlobalStateParam(selectedModelId.getStateParameter()); + page.addGlobalStateParam(selectedComponentId.getStateParameter()); page.setVisibleDefault(addNewModel, true); page.setVisibleDefault(pageModelsTable, true); 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 5ec72ac38..0142d1962 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 @@ -23,6 +23,7 @@ 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; @@ -33,6 +34,9 @@ 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; @@ -54,6 +58,9 @@ class PageModelsController implements Serializable { @Inject private ComponentModelRepository componentModelRepo; + @Inject + private ComponentModels componentModels; + @Inject private GlobalizationHelper globalizationHelper; @@ -117,6 +124,22 @@ class PageModelsController implements Serializable { return row; } + 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(); + } + } + protected Class getComponentModelForm( final long componentModelId) { @@ -135,15 +158,16 @@ class PageModelsController implements Serializable { protected Class getComponentModelForm( final Class clazz) { - if (clazz.isAnnotationPresent(PageModelComponentModel.class)) { + Objects.requireNonNull(clazz); - final PageModelComponentModel annotation = clazz - .getAnnotation(PageModelComponentModel.class); + final Optional info = componentModels + .getComponentModelInfo(clazz); - return annotation.editor(); - } else { - return null; - } + return info + .orElseThrow(() -> new IllegalArgumentException(String + .format("No data about ComponentModel class \"%s\" available.", + clazz.getName()))) + .editor(); } @Transactional(Transactional.TxType.REQUIRED) @@ -156,12 +180,26 @@ class PageModelsController implements Serializable { pageModelId))); final List components = new ArrayList<>(); - for(final ComponentModel component : model.getComponents()) { + for (final ComponentModel component : model.getComponents()) { components.add(component); } return components; } + @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))); + + pageModelManager.addComponentModel(model, componentModel); + + } + @Transactional(Transactional.TxType.REQUIRED) protected void removeComponentModel(final long pageModelId, final long componentModelId) { diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java index 193004aa8..fc01545b5 100644 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java +++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java @@ -23,7 +23,10 @@ import org.libreccm.modules.Module; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.ServiceLoader; import javax.annotation.PostConstruct; @@ -36,8 +39,12 @@ import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class ComponentModels { - private final List availableComponentModels = new ArrayList<>(); - + private final List availableComponentModels + = new ArrayList<>(); + + private final Map componentInfos + = new HashMap<>(); + @PostConstruct private void init() { @@ -49,12 +56,14 @@ public class ComponentModels { final Module moduleData = module .getClass() .getAnnotation(Module.class); - + final PageModelComponentModel[] componentModels = moduleData - .pageModelComponentModels(); - - for(final PageModelComponentModel componentModel : componentModels) { + .pageModelComponentModels(); + + for (final PageModelComponentModel componentModel : componentModels) { availableComponentModels.add(componentModel); + componentInfos.put(componentModel.modelClass().getName(), + componentModel); } } } @@ -63,4 +72,20 @@ public class ComponentModels { return Collections.unmodifiableList(availableComponentModels); } + public Optional getComponentModelInfo( + final Class clazz) { + + return getComponentModelInfo(clazz.getName()); + } + + public Optional getComponentModelInfo( + final String className) { + + if (componentInfos.containsKey(className)) { + return Optional.of(componentInfos.get(className)); + } else { + return Optional.empty(); + } + } + }