CCM NG: PageModel AdminUI should now work
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5130 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
856c8553ec
commit
ab058ba86b
|
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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[]{};
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue