CCM NG: PageModel AdminUI should now work

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5130 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
jensp 2017-11-22 11:07:35 +00:00
parent 856c8553ec
commit ab058ba86b
7 changed files with 127 additions and 64 deletions

View File

@ -59,7 +59,7 @@ public abstract class AbstractContentItemComponentForm<T extends ContentItemComp
modeField = new TextField(ITEM_MODE); modeField = new TextField(ITEM_MODE);
modeField.setLabel(new GlobalizedMessage( modeField.setLabel(new GlobalizedMessage(
"cms.ui.pagemodel.contentitem_component_form.mode.label", "cms.ui.pagemodel.contentitem_component_form.mode.label",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
add(modeField); add(modeField);
} }
@ -81,7 +81,9 @@ public abstract class AbstractContentItemComponentForm<T extends ContentItemComp
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final ContentItemComponent component = getComponentModel(); final ContentItemComponent component = getComponentModel();
modeField.setValue(state, component.getMode()); if (getComponentModel() != null) {
modeField.setValue(state, component.getMode());
}
} }
} }

View File

@ -98,7 +98,7 @@ public class CategoryTreeComponentForm extends AbstractComponentModelForm<Catego
final CategoryTreeComponent component = getComponentModel(); final CategoryTreeComponent component = getComponentModel();
final Object[] showFullTreeValue; final Object[] showFullTreeValue;
if (component.isShowFullTree()) { if (component != null && component.isShowFullTree()) {
showFullTreeValue = new Object[]{SHOW_FULL_TREE}; showFullTreeValue = new Object[]{SHOW_FULL_TREE};
} else { } else {
showFullTreeValue = new Object[]{}; showFullTreeValue = new Object[]{};

View File

@ -96,17 +96,20 @@ public abstract class AbstractComponentModelForm<T extends ComponentModel>
this.selectedModelId = selectedModelId; this.selectedModelId = selectedModelId;
this.selectedComponentId = selectedComponentId; this.selectedComponentId = selectedComponentId;
keyField = new TextField(COMPONENT_KEY); // keyField = new TextField(COMPONENT_KEY);
keyField.setLabel(new GlobalizedMessage( // keyField.setLabel(new GlobalizedMessage(
"ui.admin.pagemodels.components.key.label", // "ui.admin.pagemodels.components.key.label",
AdminUiConstants.ADMIN_BUNDLE)); // AdminUiConstants.ADMIN_BUNDLE));
super.add(keyField); // super.add(keyField);
createWidgets();
addBasicWidgets(); super.addInitListener(this);
super.addValidationListener(this);
super.addProcessListener(this);
} }
private void addBasicWidgets() { private void createWidgets() {
keyField = new TextField("componentModelKey"); keyField = new TextField(COMPONENT_KEY);
keyField.setLabel(new GlobalizedMessage( keyField.setLabel(new GlobalizedMessage(
"ui.admin.pagemodels.components.key.label", "ui.admin.pagemodels.components.key.label",
AdminUiConstants.ADMIN_BUNDLE)); AdminUiConstants.ADMIN_BUNDLE));
@ -226,10 +229,8 @@ public abstract class AbstractComponentModelForm<T extends ComponentModel>
.getSelectedKey(state); .getSelectedKey(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final PageModelRepository pageModelRepo = cdiUtil final PageModelsController controller = cdiUtil
.findBean(PageModelRepository.class); .findBean(PageModelsController.class);
final PageModelManager pageModelManager = cdiUtil
.findBean(PageModelManager.class);
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final String keyValue = data.getString(COMPONENT_KEY); final String keyValue = data.getString(COMPONENT_KEY);
@ -241,13 +242,8 @@ public abstract class AbstractComponentModelForm<T extends ComponentModel>
componentModel.setKey(keyValue); componentModel.setKey(keyValue);
updateComponentModel(componentModel, state, data); updateComponentModel(componentModel, state, data);
final PageModel pageModel = pageModelRepo controller.addComponentModel(Long.parseLong(selectedModelIdStr),
.findById(Long.parseLong(selectedModelIdStr)) componentModel);
.orElseThrow(() -> new IllegalArgumentException(String
.format("No PageModel with ID %s in the database.",
selectedModelIdStr)));
pageModelManager.addComponentModel(pageModel, componentModel);
} else { } else {
componentModel = retrieveComponentModel(selectedComponentIdStr); componentModel = retrieveComponentModel(selectedComponentIdStr);

View File

@ -231,8 +231,13 @@ class ComponentsTable extends Table {
switch (columnIndex) { switch (columnIndex) {
case ComponentsTable.COL_COMPONENT_KEY: case ComponentsTable.COL_COMPONENT_KEY:
return currentComponent.getKey(); return currentComponent.getKey();
case ComponentsTable.COL_COMPONENT_TYPE: case ComponentsTable.COL_COMPONENT_TYPE: {
return currentComponent.getClass().getName(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final PageModelsController controller = cdiUtil
.findBean(PageModelsController.class);
return controller
.getComponentModelTitle(currentComponent.getClass());
}
case ComponentsTable.COL_EDIT: case ComponentsTable.COL_EDIT:
return new Label(new GlobalizedMessage( return new Label(new GlobalizedMessage(
"ui.admin.pagemodels.components.edit", "ui.admin.pagemodels.components.edit",

View File

@ -88,37 +88,33 @@ public class PageModelTab extends LayoutPanel {
.findBean(PageModelsController.class); .findBean(PageModelsController.class);
try { try {
final Class<? extends Form> formClass;
if (selectedComponentId.getSelectedKey(state) == null if (selectedComponentId.getSelectedKey(state) == null
|| selectedComponentId.getSelectedKey(state) || selectedComponentId.getSelectedKey(state)
.isEmpty()) { .isEmpty()) {
formClass = controller
final Class<? extends Form> formClass = controller
.getComponentModelForm(componentModelClass); .getComponentModelForm(componentModelClass);
formClass
.getDeclaredConstructor()
.newInstance();
} else { } else {
formClass = controller
final Class<? extends Form> formClass = controller
.getComponentModelForm(Long .getComponentModelForm(Long
.parseLong(selectedComponentId .parseLong(selectedComponentId
.getSelectedKey(state))); .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 } catch (InstantiationException
| InvocationTargetException | InvocationTargetException
| IllegalAccessException | IllegalAccessException
| NoSuchMethodException ex) { | NoSuchMethodException ex) {
throw new UnexpectedErrorException(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); final BoxPanel right = new BoxPanel(BoxPanel.VERTICAL);
@ -138,6 +134,7 @@ public class PageModelTab extends LayoutPanel {
super.register(page); super.register(page);
page.addGlobalStateParam(selectedModelId.getStateParameter()); page.addGlobalStateParam(selectedModelId.getStateParameter());
page.addGlobalStateParam(selectedComponentId.getStateParameter());
page.setVisibleDefault(addNewModel, true); page.setVisibleDefault(addNewModel, true);
page.setVisibleDefault(pageModelsTable, true); page.setVisibleDefault(pageModelsTable, true);

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.Form;
import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.pagemodel.ComponentModel; import org.libreccm.pagemodel.ComponentModel;
import org.libreccm.pagemodel.ComponentModelRepository; import org.libreccm.pagemodel.ComponentModelRepository;
import org.libreccm.pagemodel.ComponentModels;
import org.libreccm.pagemodel.PageModel; import org.libreccm.pagemodel.PageModel;
import org.libreccm.pagemodel.PageModelComponentModel; import org.libreccm.pagemodel.PageModelComponentModel;
import org.libreccm.pagemodel.PageModelManager; import org.libreccm.pagemodel.PageModelManager;
@ -33,6 +34,9 @@ import org.libreccm.web.CcmApplication;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
@ -54,6 +58,9 @@ class PageModelsController implements Serializable {
@Inject @Inject
private ComponentModelRepository componentModelRepo; private ComponentModelRepository componentModelRepo;
@Inject
private ComponentModels componentModels;
@Inject @Inject
private GlobalizationHelper globalizationHelper; private GlobalizationHelper globalizationHelper;
@ -117,6 +124,22 @@ class PageModelsController implements Serializable {
return row; return row;
} }
protected String getComponentModelTitle(
final Class<? extends ComponentModel> clazz) {
final Optional<PageModelComponentModel> 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<? extends Form> getComponentModelForm( protected Class<? extends Form> getComponentModelForm(
final long componentModelId) { final long componentModelId) {
@ -135,15 +158,16 @@ class PageModelsController implements Serializable {
protected Class<? extends Form> getComponentModelForm( protected Class<? extends Form> getComponentModelForm(
final Class<? extends ComponentModel> clazz) { final Class<? extends ComponentModel> clazz) {
if (clazz.isAnnotationPresent(PageModelComponentModel.class)) { Objects.requireNonNull(clazz);
final PageModelComponentModel annotation = clazz final Optional<PageModelComponentModel> info = componentModels
.getAnnotation(PageModelComponentModel.class); .getComponentModelInfo(clazz);
return annotation.editor(); return info
} else { .orElseThrow(() -> new IllegalArgumentException(String
return null; .format("No data about ComponentModel class \"%s\" available.",
} clazz.getName())))
.editor();
} }
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -156,12 +180,26 @@ class PageModelsController implements Serializable {
pageModelId))); pageModelId)));
final List<ComponentModel> components = new ArrayList<>(); final List<ComponentModel> components = new ArrayList<>();
for(final ComponentModel component : model.getComponents()) { for (final ComponentModel component : model.getComponents()) {
components.add(component); components.add(component);
} }
return components; 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) @Transactional(Transactional.TxType.REQUIRED)
protected void removeComponentModel(final long pageModelId, protected void removeComponentModel(final long pageModelId,
final long componentModelId) { final long componentModelId) {

View File

@ -23,7 +23,10 @@ import org.libreccm.modules.Module;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.ServiceLoader; import java.util.ServiceLoader;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@ -36,7 +39,11 @@ import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped @ApplicationScoped
public class ComponentModels { public class ComponentModels {
private final List<PageModelComponentModel> availableComponentModels = new ArrayList<>(); private final List<PageModelComponentModel> availableComponentModels
= new ArrayList<>();
private final Map<String, PageModelComponentModel> componentInfos
= new HashMap<>();
@PostConstruct @PostConstruct
private void init() { private void init() {
@ -51,10 +58,12 @@ public class ComponentModels {
.getAnnotation(Module.class); .getAnnotation(Module.class);
final PageModelComponentModel[] componentModels = moduleData final PageModelComponentModel[] componentModels = moduleData
.pageModelComponentModels(); .pageModelComponentModels();
for(final PageModelComponentModel componentModel : componentModels) { for (final PageModelComponentModel componentModel : componentModels) {
availableComponentModels.add(componentModel); availableComponentModels.add(componentModel);
componentInfos.put(componentModel.modelClass().getName(),
componentModel);
} }
} }
} }
@ -63,4 +72,20 @@ public class ComponentModels {
return Collections.unmodifiableList(availableComponentModels); return Collections.unmodifiableList(availableComponentModels);
} }
public Optional<PageModelComponentModel> getComponentModelInfo(
final Class<? extends ComponentModel> clazz) {
return getComponentModelInfo(clazz.getName());
}
public Optional<PageModelComponentModel> getComponentModelInfo(
final String className) {
if (componentInfos.containsKey(className)) {
return Optional.of(componentInfos.get(className));
} else {
return Optional.empty();
}
}
} }