CCM NG: Next part of admin UI for PageModels
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5126 8810af33-2d31-482b-a856-94f89814c4df
Former-commit-id: 2fa6600a8f
pull/2/head
parent
3e99b283a9
commit
adba0f5e59
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.AbstractComponentModelForm;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
import org.librecms.pagemodel.ContentItemComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param <T>
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractContentItemComponentForm<T extends ContentItemComponent>
|
||||||
|
extends AbstractComponentModelForm<T> {
|
||||||
|
|
||||||
|
private static final String ITEM_MODE = "itemMode";
|
||||||
|
|
||||||
|
private TextField modeField;
|
||||||
|
|
||||||
|
public AbstractContentItemComponentForm(
|
||||||
|
final String name,
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super(name, pageModelTab, selectedModelId, selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
|
||||||
|
modeField = new TextField(ITEM_MODE);
|
||||||
|
modeField.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.contentitem_component_form.mode.label",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
add(modeField);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateComponentModel(final ContentItemComponent componentModel,
|
||||||
|
final PageState state,
|
||||||
|
final FormData data) {
|
||||||
|
|
||||||
|
final String modeValue = data.getString(ITEM_MODE);
|
||||||
|
componentModel.setMode(modeValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.init(event);
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final ContentItemComponent component = getComponentModel();
|
||||||
|
|
||||||
|
modeField.setValue(state, component.getMode());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.librecms.pagemodel.CategorizedItemComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class CategorizedItemComponentForm
|
||||||
|
extends AbstractContentItemComponentForm<CategorizedItemComponent> {
|
||||||
|
|
||||||
|
public CategorizedItemComponentForm(
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super("CategorizedItemComponentForm",
|
||||||
|
pageModelTab,
|
||||||
|
selectedModelId,
|
||||||
|
selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CategorizedItemComponent createComponentModel() {
|
||||||
|
return new CategorizedItemComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.form.CheckboxGroup;
|
||||||
|
import com.arsdigita.bebop.form.Option;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.AbstractComponentModelForm;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
import org.librecms.pagemodel.CategoryTreeComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class CategoryTreeComponentForm extends AbstractComponentModelForm<CategoryTreeComponent> {
|
||||||
|
|
||||||
|
private final static String SHOW_FULL_TREE_BOX = "showFullTreeBox";
|
||||||
|
private final static String SHOW_FULL_TREE = "showFullTree";
|
||||||
|
|
||||||
|
private CheckboxGroup showFullTreeCheckbox;
|
||||||
|
|
||||||
|
public CategoryTreeComponentForm(
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super("CategoryTreeComponentForm", pageModelTab, selectedModelId,
|
||||||
|
selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
|
||||||
|
showFullTreeCheckbox = new CheckboxGroup(SHOW_FULL_TREE_BOX);
|
||||||
|
showFullTreeCheckbox.addOption(new Option(
|
||||||
|
SHOW_FULL_TREE,
|
||||||
|
new Label(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.category_tree_component.show_full_tree.label",
|
||||||
|
CmsConstants.CMS_BUNDLE))));
|
||||||
|
add(showFullTreeCheckbox);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CategoryTreeComponent createComponentModel() {
|
||||||
|
return new CategoryTreeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateComponentModel(
|
||||||
|
final CategoryTreeComponent componentModel,
|
||||||
|
final PageState state,
|
||||||
|
final FormData data) {
|
||||||
|
|
||||||
|
final Object[] value = (Object[]) data.get(SHOW_FULL_TREE_BOX);
|
||||||
|
if (value != null
|
||||||
|
&& value.length != 0
|
||||||
|
&& SHOW_FULL_TREE.equals(value[0])) {
|
||||||
|
|
||||||
|
componentModel.setShowFullTree(true);
|
||||||
|
} else {
|
||||||
|
componentModel.setShowFullTree(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.init(event);
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
final CategoryTreeComponent component = getComponentModel();
|
||||||
|
|
||||||
|
final Object[] showFullTreeValue;
|
||||||
|
if (component.isShowFullTree()) {
|
||||||
|
showFullTreeValue = new Object[]{SHOW_FULL_TREE};
|
||||||
|
} else {
|
||||||
|
showFullTreeValue = new Object[]{};
|
||||||
|
}
|
||||||
|
|
||||||
|
showFullTreeCheckbox.setValue(state, showFullTreeValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.cms.ui.assets.ItemSearchWidget;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
import org.librecms.contentsection.ContentItem;
|
||||||
|
import org.librecms.contentsection.ContentItemRepository;
|
||||||
|
import org.librecms.pagemodel.FixedContentItemComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class FixedContentItemComponentForm
|
||||||
|
extends AbstractContentItemComponentForm<FixedContentItemComponent> {
|
||||||
|
|
||||||
|
private final static String ITEM_SEARCH = "itemSearch";
|
||||||
|
|
||||||
|
private ItemSearchWidget itemSearchWidget;
|
||||||
|
|
||||||
|
public FixedContentItemComponentForm(
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super("FixedContentItemComponentForm",
|
||||||
|
pageModelTab,
|
||||||
|
selectedModelId,
|
||||||
|
selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
|
||||||
|
itemSearchWidget = new ItemSearchWidget(ITEM_SEARCH);
|
||||||
|
itemSearchWidget.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.fixed_contentitem_component_form.itemsearch.label",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
add(itemSearchWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected FixedContentItemComponent createComponentModel() {
|
||||||
|
return new FixedContentItemComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateComponentModel(
|
||||||
|
final FixedContentItemComponent component,
|
||||||
|
final PageState state,
|
||||||
|
final FormData data) {
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final ContentItemRepository itemRepo = cdiUtil
|
||||||
|
.findBean(ContentItemRepository.class);
|
||||||
|
|
||||||
|
final long itemId = (long) itemSearchWidget.getValue(state);
|
||||||
|
|
||||||
|
final ContentItem item = itemRepo
|
||||||
|
.findById(itemId)
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException());
|
||||||
|
|
||||||
|
component.setContentItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.init(event);
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final FixedContentItemComponent component = getComponentModel();
|
||||||
|
|
||||||
|
itemSearchWidget.setValue(state, component.getContentItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.validate(event);
|
||||||
|
|
||||||
|
final FormData data = event.getFormData();
|
||||||
|
final Object value = data.get(ITEM_SEARCH);
|
||||||
|
|
||||||
|
if (value == null) {
|
||||||
|
data.addError(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.fixed_contentitem_component_form.error.no_item_selected",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.librecms.pagemodel.GreetingItemComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class GreetingItemComponentForm
|
||||||
|
extends AbstractContentItemComponentForm<GreetingItemComponent> {
|
||||||
|
|
||||||
|
public GreetingItemComponentForm(
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super("GreetingItemComponentForm",
|
||||||
|
pageModelTab,
|
||||||
|
selectedModelId,
|
||||||
|
selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GreetingItemComponent createComponentModel() {
|
||||||
|
return new GreetingItemComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,189 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.cms.ui.pagemodel;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.form.CheckboxGroup;
|
||||||
|
import com.arsdigita.bebop.form.Option;
|
||||||
|
import com.arsdigita.bebop.form.TextArea;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.AbstractComponentModelForm;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
|
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
import org.librecms.pagemodel.ItemListComponent;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class ItemListComponentForm
|
||||||
|
extends AbstractComponentModelForm<ItemListComponent> {
|
||||||
|
|
||||||
|
private static final String DESCENDING_BOX = "descendingBox";
|
||||||
|
private static final String DESCENDING = "descending";
|
||||||
|
private static final String LIMIT_TO_TYPE = "limitToType";
|
||||||
|
private static final String PAGE_SIZE = "pageSize";
|
||||||
|
private static final String LIST_ORDER = "listOrder";
|
||||||
|
|
||||||
|
private CheckboxGroup descendingBox;
|
||||||
|
private TextField limitToTypeField;
|
||||||
|
private TextField pageSizeField;
|
||||||
|
private TextArea listOrderArea;
|
||||||
|
|
||||||
|
public ItemListComponentForm(
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super("ItemListComponentForm",
|
||||||
|
pageModelTab,
|
||||||
|
selectedModelId,
|
||||||
|
selectedComponentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addWidgets() {
|
||||||
|
|
||||||
|
descendingBox = new CheckboxGroup(DESCENDING_BOX);
|
||||||
|
descendingBox.addOption(new Option(
|
||||||
|
DESCENDING, new Label(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.itemlist_component_form.descending.label",
|
||||||
|
CmsConstants.CMS_BUNDLE))));
|
||||||
|
add(descendingBox);
|
||||||
|
|
||||||
|
limitToTypeField = new TextField(LIMIT_TO_TYPE);
|
||||||
|
limitToTypeField.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.itemlist_component_form.limit_to_type.label",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
add(limitToTypeField);
|
||||||
|
|
||||||
|
pageSizeField = new TextField(PAGE_SIZE);
|
||||||
|
pageSizeField.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.itemlist_component_form.page_size.label",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
add(pageSizeField);
|
||||||
|
|
||||||
|
listOrderArea = new TextArea(LIST_ORDER);
|
||||||
|
listOrderArea.setLabel(new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.itemlist_component_form.list_order.label",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
add(listOrderArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ItemListComponent createComponentModel() {
|
||||||
|
return new ItemListComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateComponentModel(final ItemListComponent componentModel,
|
||||||
|
final PageState state,
|
||||||
|
final FormData data) {
|
||||||
|
|
||||||
|
final Object[] descendingValues = (Object[]) data.get(DESCENDING);
|
||||||
|
final String limitToTypeValue = data.getString(LIMIT_TO_TYPE);
|
||||||
|
final String pageSizeValue = data.getString(PAGE_SIZE);
|
||||||
|
final String listOrderValue = data.getString(LIST_ORDER);
|
||||||
|
|
||||||
|
final boolean descendingValue;
|
||||||
|
if (descendingValues != null
|
||||||
|
&& descendingValues.length != 0
|
||||||
|
&& DESCENDING.equals(descendingValues[0])) {
|
||||||
|
|
||||||
|
descendingValue = true;
|
||||||
|
} else {
|
||||||
|
descendingValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<String> listOrder = Arrays
|
||||||
|
.stream(listOrderValue.split("\n"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
componentModel.setDescending(descendingValue);
|
||||||
|
componentModel.setLimitToTypes(limitToTypeValue);
|
||||||
|
componentModel.setPageSize(Integer.parseInt(pageSizeValue));
|
||||||
|
|
||||||
|
componentModel.setListOrder(listOrder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.init(event);
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
final ItemListComponent component = getComponentModel();
|
||||||
|
|
||||||
|
final Object[] descendingValue;
|
||||||
|
if (component.isDescending()) {
|
||||||
|
descendingValue = new Object[]{DESCENDING};
|
||||||
|
} else {
|
||||||
|
descendingValue = new Object[]{};
|
||||||
|
}
|
||||||
|
descendingBox.setValue(state, descendingValue);
|
||||||
|
|
||||||
|
limitToTypeField.setValue(state, component.getLimitToType());
|
||||||
|
|
||||||
|
pageSizeField.setValue(state, Integer.toString(component.getPageSize()));
|
||||||
|
|
||||||
|
listOrderArea.setValue(state,
|
||||||
|
String.join("\n", component.getListOrder()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
super.validate(event);
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final FormData data = event.getFormData();
|
||||||
|
|
||||||
|
if (getSaveCancelSection().getSaveButton().isSelected(state)) {
|
||||||
|
|
||||||
|
final String pageSizeValue = data.getString(PAGE_SIZE);
|
||||||
|
if (pageSizeValue != null
|
||||||
|
&& !pageSizeValue.isEmpty()
|
||||||
|
&& !pageSizeValue.matches("\\d*")) {
|
||||||
|
|
||||||
|
data.addError(
|
||||||
|
PAGE_SIZE,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"cms.ui.pagemodel.itemlist_component_form.page_size.error.not_a_number",
|
||||||
|
CmsConstants.CMS_BUNDLE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,6 +6,12 @@ package org.librecms;
|
||||||
import com.arsdigita.cms.ContentCenterAppCreator;
|
import com.arsdigita.cms.ContentCenterAppCreator;
|
||||||
import com.arsdigita.cms.ContentCenterServlet;
|
import com.arsdigita.cms.ContentCenterServlet;
|
||||||
import com.arsdigita.cms.ContentCenterSetup;
|
import com.arsdigita.cms.ContentCenterSetup;
|
||||||
|
import com.arsdigita.cms.ui.authoring.ItemCategoryForm;
|
||||||
|
import com.arsdigita.cms.ui.pagemodel.CategorizedItemComponentForm;
|
||||||
|
import com.arsdigita.cms.ui.pagemodel.CategoryTreeComponentForm;
|
||||||
|
import com.arsdigita.cms.ui.pagemodel.FixedContentItemComponentForm;
|
||||||
|
import com.arsdigita.cms.ui.pagemodel.GreetingItemComponentForm;
|
||||||
|
import com.arsdigita.cms.ui.pagemodel.ItemListComponentForm;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
@ -17,6 +23,7 @@ import org.libreccm.modules.Module;
|
||||||
import org.libreccm.modules.RequiredModule;
|
import org.libreccm.modules.RequiredModule;
|
||||||
import org.libreccm.modules.ShutdownEvent;
|
import org.libreccm.modules.ShutdownEvent;
|
||||||
import org.libreccm.modules.UnInstallEvent;
|
import org.libreccm.modules.UnInstallEvent;
|
||||||
|
import org.libreccm.pagemodel.PageModelComponentModel;
|
||||||
import org.libreccm.web.ApplicationType;
|
import org.libreccm.web.ApplicationType;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
import org.librecms.assets.*;
|
import org.librecms.assets.*;
|
||||||
|
|
@ -30,6 +37,11 @@ import org.librecms.contenttypes.ContentTypes;
|
||||||
import org.librecms.contenttypes.Event;
|
import org.librecms.contenttypes.Event;
|
||||||
import org.librecms.contenttypes.MultiPartArticle;
|
import org.librecms.contenttypes.MultiPartArticle;
|
||||||
import org.librecms.contenttypes.News;
|
import org.librecms.contenttypes.News;
|
||||||
|
import org.librecms.pagemodel.CategorizedItemComponent;
|
||||||
|
import org.librecms.pagemodel.CategoryTreeComponent;
|
||||||
|
import org.librecms.pagemodel.FixedContentItemComponent;
|
||||||
|
import org.librecms.pagemodel.GreetingItemComponent;
|
||||||
|
import org.librecms.pagemodel.ItemListComponent;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
@ -57,6 +69,48 @@ import java.util.Properties;
|
||||||
creator = ContentSectionCreator.class,
|
creator = ContentSectionCreator.class,
|
||||||
servletPath = "/templates/servlet/content-section"
|
servletPath = "/templates/servlet/content-section"
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
pageModelComponentModels = {
|
||||||
|
@PageModelComponentModel(
|
||||||
|
modelClass = CategorizedItemComponent.class,
|
||||||
|
editor = CategorizedItemComponentForm.class,
|
||||||
|
descBundle = CmsConstants.CMS_BUNDLE,
|
||||||
|
titleKey
|
||||||
|
= "cms.ui.pagemodel.components.categorized_item_component.title",
|
||||||
|
descKey
|
||||||
|
= "cms.ui.pagemodel.components.categorized_item_component.desc")
|
||||||
|
,
|
||||||
|
@PageModelComponentModel(
|
||||||
|
modelClass = CategoryTreeComponent.class,
|
||||||
|
editor = CategoryTreeComponentForm.class,
|
||||||
|
descBundle = CmsConstants.CMS_BUNDLE,
|
||||||
|
titleKey
|
||||||
|
= "cms.ui.pagemodel.components.category_tree_component.title",
|
||||||
|
descKey = "cms.ui.pagemodel.components.category_tree_component.desc")
|
||||||
|
,
|
||||||
|
@PageModelComponentModel(
|
||||||
|
modelClass = FixedContentItemComponent.class,
|
||||||
|
editor = FixedContentItemComponentForm.class,
|
||||||
|
descBundle = CmsConstants.CMS_BUNDLE,
|
||||||
|
titleKey
|
||||||
|
= "cms.ui.pagemodel.components.fixed_contentitem_component.title",
|
||||||
|
descKey
|
||||||
|
= "cms.ui.pagemodel.components.fixed_contentitem_component.desc")
|
||||||
|
,
|
||||||
|
@PageModelComponentModel(
|
||||||
|
modelClass = GreetingItemComponent.class,
|
||||||
|
editor = GreetingItemComponentForm.class,
|
||||||
|
descBundle = CmsConstants.CMS_BUNDLE,
|
||||||
|
titleKey
|
||||||
|
= "cms.ui.pagemodel.components.greetingitem_component.title",
|
||||||
|
descKey = "cms.ui.pagemodel.components.greetingitem_component.desc")
|
||||||
|
,
|
||||||
|
@PageModelComponentModel(
|
||||||
|
modelClass = ItemListComponent.class,
|
||||||
|
editor = ItemListComponentForm.class,
|
||||||
|
descBundle = CmsConstants.CMS_BUNDLE,
|
||||||
|
titleKey = "cms.ui.pagemodel.components.itemlist_component.title",
|
||||||
|
descKey = "cms.ui.pagemodel.components.itemlist_component.desc")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ContentTypes({Article.class,
|
@ContentTypes({Article.class,
|
||||||
|
|
|
||||||
|
|
@ -457,3 +457,12 @@ cms.ui.item.notification_period=Notify in advance
|
||||||
cms.ui.item.days=days
|
cms.ui.item.days=days
|
||||||
cms.ui.item.hours=hours
|
cms.ui.item.hours=hours
|
||||||
cms.ui.item.lifecycle.publish=Publish content item
|
cms.ui.item.lifecycle.publish=Publish content item
|
||||||
|
cms.ui.pagemodel.contentitem_component_form.mode.label=Mode
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.itemsearch.label=Content Item
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.error.no_item_selected=No item selected.
|
||||||
|
cms.ui.pagemodel.category_tree_component_form.show_full_tree.label=Show full tree?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.descending.label=Descending?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.limit_to_type.label=Limit to type
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.label=Number of items per page
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.list_order.label=Order list using these properties
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.error.not_a_number=Number of items per page is not a number
|
||||||
|
|
|
||||||
|
|
@ -454,3 +454,12 @@ cms.ui.item.notification_period=Vorab Benachrichtigung
|
||||||
cms.ui.item.days=Tage
|
cms.ui.item.days=Tage
|
||||||
cms.ui.item.hours=Stunden
|
cms.ui.item.hours=Stunden
|
||||||
cms.ui.item.lifecycle.publish=Dokument ver\u00f6ffentlichen
|
cms.ui.item.lifecycle.publish=Dokument ver\u00f6ffentlichen
|
||||||
|
cms.ui.pagemodel.contentitem_component_form.mode.label=Modus
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.itemsearch.label=Content Item
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.error.no_item_selected=Es wurde keine ContentItem ausgew\u00e4hlt.
|
||||||
|
cms.ui.pagemodel.category_tree_component_form.show_full_tree.label=Vollst\u00e4ndigen Baum anzeigen?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.descending.label=Absteigend?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.limit_to_type.label=Auf Typ beschr\u00e4nken
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.label=Anzahl von Objekten pro Seite
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.list_order.label=List nach diesen Eigenschaften sortieren
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.error.not_a_number=Die Anzahl der Objekte pro Seite ist keine Zahl.
|
||||||
|
|
|
||||||
|
|
@ -413,3 +413,12 @@ cms.ui.item.notification_period=Notify in advance
|
||||||
cms.ui.item.days=days
|
cms.ui.item.days=days
|
||||||
cms.ui.item.hours=hours
|
cms.ui.item.hours=hours
|
||||||
cms.ui.item.lifecycle.publish=Publish content item
|
cms.ui.item.lifecycle.publish=Publish content item
|
||||||
|
cms.ui.pagemodel.contentitem_component_form.mode.label=Mode
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.itemsearch.label=Content Item
|
||||||
|
cms.ui.pagemodel.fixed_contentitem_component_form.error.no_item_selected=No item selected.
|
||||||
|
cms.ui.pagemodel.category_tree_component_form.show_full_tree.label=Show full tree?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.descending.label=Descending?
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.limit_to_type.label=Limit to type
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.label=Number of items per page
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.list_order.label=Order list using these properties
|
||||||
|
cms.ui.pagemodel.itemlist_component_form.page_size.error.not_a_number=Number of items per page is not a number
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ import com.arsdigita.ui.admin.applications.ApplicationsTab;
|
||||||
import com.arsdigita.ui.admin.categories.CategoriesTab;
|
import com.arsdigita.ui.admin.categories.CategoriesTab;
|
||||||
import com.arsdigita.ui.admin.configuration.ConfigurationTab;
|
import com.arsdigita.ui.admin.configuration.ConfigurationTab;
|
||||||
import com.arsdigita.ui.admin.importexport.ImportExportTab;
|
import com.arsdigita.ui.admin.importexport.ImportExportTab;
|
||||||
|
import com.arsdigita.ui.admin.pagemodels.PageModelTab;
|
||||||
import com.arsdigita.ui.admin.sites.SitesTab;
|
import com.arsdigita.ui.admin.sites.SitesTab;
|
||||||
import com.arsdigita.web.BaseApplicationServlet;
|
import com.arsdigita.web.BaseApplicationServlet;
|
||||||
import com.arsdigita.web.LoginSignal;
|
import com.arsdigita.web.LoginSignal;
|
||||||
|
|
@ -120,6 +121,16 @@ public class AdminServlet extends BaseApplicationServlet {
|
||||||
ADMIN_BUNDLE)),
|
ADMIN_BUNDLE)),
|
||||||
new ApplicationsTab());
|
new ApplicationsTab());
|
||||||
|
|
||||||
|
tabbedPane.addTab(
|
||||||
|
new Label(new GlobalizedMessage("ui.admin.tab.sites.title",
|
||||||
|
ADMIN_BUNDLE)),
|
||||||
|
new SitesTab());
|
||||||
|
|
||||||
|
tabbedPane.addTab(
|
||||||
|
new Label(new GlobalizedMessage("ui.admin.tab.pagemodels.title",
|
||||||
|
ADMIN_BUNDLE)),
|
||||||
|
new PageModelTab());
|
||||||
|
|
||||||
tabbedPane.addTab(
|
tabbedPane.addTab(
|
||||||
new Label(new GlobalizedMessage(
|
new Label(new GlobalizedMessage(
|
||||||
"ui.admin.tab.users_groups_roles.title",
|
"ui.admin.tab.users_groups_roles.title",
|
||||||
|
|
@ -136,11 +147,6 @@ public class AdminServlet extends BaseApplicationServlet {
|
||||||
ADMIN_BUNDLE)),
|
ADMIN_BUNDLE)),
|
||||||
new ConfigurationTab());
|
new ConfigurationTab());
|
||||||
|
|
||||||
tabbedPane.addTab(
|
|
||||||
new Label(new GlobalizedMessage("ui.admin.tab.sites.title",
|
|
||||||
ADMIN_BUNDLE)),
|
|
||||||
new SitesTab());
|
|
||||||
|
|
||||||
tabbedPane.addTab(
|
tabbedPane.addTab(
|
||||||
new Label(new GlobalizedMessage("ui.admin.tab.workflows.title",
|
new Label(new GlobalizedMessage("ui.admin.tab.workflows.title",
|
||||||
ADMIN_BUNDLE)),
|
ADMIN_BUNDLE)),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,286 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 LibreCCM Foundation.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package com.arsdigita.ui.admin.pagemodels;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Form;
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.SaveCancelSection;
|
||||||
|
import com.arsdigita.bebop.event.FormInitListener;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.event.FormValidationListener;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.AdminUiConstants;
|
||||||
|
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.pagemodel.ComponentModel;
|
||||||
|
import org.libreccm.pagemodel.ComponentModelRepository;
|
||||||
|
import org.libreccm.pagemodel.PageModel;
|
||||||
|
import org.libreccm.pagemodel.PageModelManager;
|
||||||
|
import org.libreccm.pagemodel.PageModelRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base form for creating forms for editing/creating components of a
|
||||||
|
* {@link PageModel}.
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public abstract class AbstractComponentModelForm<T extends ComponentModel>
|
||||||
|
extends Form
|
||||||
|
implements FormInitListener,
|
||||||
|
FormValidationListener,
|
||||||
|
FormProcessListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constant for identifying the key text field.
|
||||||
|
*/
|
||||||
|
private static final String COMPONENT_KEY = "componentKey";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link PageModelTab} in which the form is used
|
||||||
|
*/
|
||||||
|
private final PageModelTab pageModelTab;
|
||||||
|
/**
|
||||||
|
* ID of the selected {@link PageModel}.
|
||||||
|
*/
|
||||||
|
private final ParameterSingleSelectionModel<String> selectedModelId;
|
||||||
|
/**
|
||||||
|
* ID of the selected {@link ComponentModel}. {@code null} of empty if a new
|
||||||
|
* component is added.
|
||||||
|
*/
|
||||||
|
private final ParameterSingleSelectionModel<String> selectedComponentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text field for the component's key in the page model.
|
||||||
|
*/
|
||||||
|
private TextField keyField;
|
||||||
|
|
||||||
|
private SaveCancelSection saveCancelSection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The selected component model.
|
||||||
|
*/
|
||||||
|
private T componentModel;
|
||||||
|
|
||||||
|
public AbstractComponentModelForm(
|
||||||
|
final String name,
|
||||||
|
final PageModelTab pageModelTab,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedModelId,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedComponentId) {
|
||||||
|
|
||||||
|
super(name);
|
||||||
|
|
||||||
|
this.pageModelTab = pageModelTab;
|
||||||
|
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);
|
||||||
|
|
||||||
|
addBasicWidgets();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addBasicWidgets() {
|
||||||
|
keyField = new TextField("componentModelKey");
|
||||||
|
keyField.setLabel(new GlobalizedMessage(
|
||||||
|
"ui.admin.pagemodels.components.key.label",
|
||||||
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
|
super.add(keyField);
|
||||||
|
|
||||||
|
addWidgets();
|
||||||
|
|
||||||
|
saveCancelSection = new SaveCancelSection();
|
||||||
|
super.add(saveCancelSection);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final PageModelTab getPageModelTab() {
|
||||||
|
return pageModelTab;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final ParameterSingleSelectionModel<String> getSelectedComponentId() {
|
||||||
|
return selectedComponentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final ParameterSingleSelectionModel<String> getSelectedModelId() {
|
||||||
|
return selectedModelId;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final SaveCancelSection getSaveCancelSection() {
|
||||||
|
return saveCancelSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final T getComponentModel() {
|
||||||
|
return componentModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subclasses have to override this method to add the widgets specific for a
|
||||||
|
* component model.
|
||||||
|
*/
|
||||||
|
protected abstract void addWidgets();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link ComponentModel} of a specific type. This method is
|
||||||
|
* only a wrapper around the constructor. An implementation should not add
|
||||||
|
* the component to a {@link PageModel} or save the {@link ComponentModel}
|
||||||
|
* in the database. This class takes care of that.
|
||||||
|
*
|
||||||
|
* @return A new {@link ComponentModel}.
|
||||||
|
*/
|
||||||
|
protected abstract T createComponentModel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the current component model with data from the form.
|
||||||
|
*
|
||||||
|
* @param componentModel
|
||||||
|
* @param state
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
protected abstract void updateComponentModel(T componentModel,
|
||||||
|
PageState state,
|
||||||
|
FormData data);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(final FormSectionEvent event) throws FormProcessException {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final String selectedComponentIdStr = selectedComponentId
|
||||||
|
.getSelectedKey(state);
|
||||||
|
|
||||||
|
if (selectedComponentIdStr != null
|
||||||
|
&& !selectedComponentIdStr.isEmpty()) {
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final ComponentModelRepository componentModelRepo = cdiUtil
|
||||||
|
.findBean(ComponentModelRepository.class);
|
||||||
|
|
||||||
|
final ComponentModel model = componentModelRepo
|
||||||
|
.findById(Long.parseLong(selectedComponentIdStr))
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No ComponentModel with ID %s in the database.",
|
||||||
|
selectedComponentIdStr)));
|
||||||
|
|
||||||
|
keyField.setValue(state, model.getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
||||||
|
|
||||||
|
final FormData data = event.getFormData();
|
||||||
|
final String keyValue = data.getString(COMPONENT_KEY);
|
||||||
|
|
||||||
|
if (keyValue == null
|
||||||
|
|| keyValue.isEmpty()
|
||||||
|
|| keyValue.matches("\\s*")) {
|
||||||
|
|
||||||
|
data.addError(COMPONENT_KEY,
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"ui.admin.pagemodels.components.key.error.not_empty",
|
||||||
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
||||||
|
|
||||||
|
final String selectedModelIdStr = selectedModelId
|
||||||
|
.getSelectedKey(state);
|
||||||
|
final String selectedComponentIdStr = selectedComponentId
|
||||||
|
.getSelectedKey(state);
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
final PageModelRepository pageModelRepo = cdiUtil
|
||||||
|
.findBean(PageModelRepository.class);
|
||||||
|
final PageModelManager pageModelManager = cdiUtil
|
||||||
|
.findBean(PageModelManager.class);
|
||||||
|
|
||||||
|
final FormData data = event.getFormData();
|
||||||
|
final String keyValue = data.getString(COMPONENT_KEY);
|
||||||
|
|
||||||
|
if (selectedComponentIdStr == null
|
||||||
|
|| selectedComponentIdStr.isEmpty()) {
|
||||||
|
|
||||||
|
componentModel = createComponentModel();
|
||||||
|
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);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
componentModel = retrieveComponentModel(selectedComponentIdStr);
|
||||||
|
componentModel.setKey(keyValue);
|
||||||
|
|
||||||
|
updateComponentModel(componentModel, state, data);
|
||||||
|
|
||||||
|
final ComponentModelRepository componentModelRepo = cdiUtil
|
||||||
|
.findBean(ComponentModelRepository.class);
|
||||||
|
componentModelRepo.save(componentModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
selectedComponentId.clearSelection(state);
|
||||||
|
pageModelTab.showPageModelDetails(state);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private T retrieveComponentModel(final String componentModelId) {
|
||||||
|
|
||||||
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
|
|
||||||
|
final ComponentModelRepository componentModelRepo = cdiUtil
|
||||||
|
.findBean(ComponentModelRepository.class);
|
||||||
|
|
||||||
|
return (T) componentModelRepo
|
||||||
|
.findById(Long.parseLong(componentModelId))
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No ComponentModel with ID %s in the database",
|
||||||
|
componentModelId)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -163,17 +163,17 @@ class ComponentsTable extends Table {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
super.setModelBuilder(new PageModelComponentsTableModelBuilder(
|
super.setModelBuilder(new ComponentsTableModelBuilder(
|
||||||
selectedModelId));
|
selectedModelId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PageModelComponentsTableModelBuilder
|
private class ComponentsTableModelBuilder
|
||||||
extends LockableImpl
|
extends LockableImpl
|
||||||
implements TableModelBuilder {
|
implements TableModelBuilder {
|
||||||
|
|
||||||
private final ParameterSingleSelectionModel<String> selectedModelId;
|
private final ParameterSingleSelectionModel<String> selectedModelId;
|
||||||
|
|
||||||
public PageModelComponentsTableModelBuilder(
|
public ComponentsTableModelBuilder(
|
||||||
final ParameterSingleSelectionModel<String> selectedModelId) {
|
final ParameterSingleSelectionModel<String> selectedModelId) {
|
||||||
|
|
||||||
this.selectedModelId = selectedModelId;
|
this.selectedModelId = selectedModelId;
|
||||||
|
|
@ -193,17 +193,17 @@ class ComponentsTable extends Table {
|
||||||
final List<ComponentModel> components = controller
|
final List<ComponentModel> components = controller
|
||||||
.retrieveComponents(Long.parseLong(selectedModelIdStr));
|
.retrieveComponents(Long.parseLong(selectedModelIdStr));
|
||||||
|
|
||||||
return new PageModelComponentsTableModel(components);
|
return new ComponentsTableModel(components);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PageModelComponentsTableModel implements TableModel {
|
private class ComponentsTableModel implements TableModel {
|
||||||
|
|
||||||
private final Iterator<ComponentModel> iterator;
|
private final Iterator<ComponentModel> iterator;
|
||||||
private ComponentModel currentComponent;
|
private ComponentModel currentComponent;
|
||||||
|
|
||||||
public PageModelComponentsTableModel(
|
public ComponentsTableModel(
|
||||||
final List<ComponentModel> components) {
|
final List<ComponentModel> components) {
|
||||||
|
|
||||||
iterator = components.iterator();
|
iterator = components.iterator();
|
||||||
|
|
|
||||||
|
|
@ -21,21 +21,30 @@ package com.arsdigita.ui.admin.pagemodels;
|
||||||
import com.arsdigita.bebop.ActionLink;
|
import com.arsdigita.bebop.ActionLink;
|
||||||
import com.arsdigita.bebop.BoxPanel;
|
import com.arsdigita.bebop.BoxPanel;
|
||||||
import com.arsdigita.bebop.Form;
|
import com.arsdigita.bebop.Form;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.Label;
|
import com.arsdigita.bebop.Label;
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
import com.arsdigita.bebop.PropertySheet;
|
import com.arsdigita.bebop.PropertySheet;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.event.PrintEvent;
|
||||||
|
import com.arsdigita.bebop.event.PrintListener;
|
||||||
|
import com.arsdigita.bebop.form.Option;
|
||||||
import com.arsdigita.bebop.form.SingleSelect;
|
import com.arsdigita.bebop.form.SingleSelect;
|
||||||
|
import com.arsdigita.bebop.form.Submit;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.ui.admin.AdminUiConstants;
|
import com.arsdigita.ui.admin.AdminUiConstants;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.core.UnexpectedErrorException;
|
import org.libreccm.core.UnexpectedErrorException;
|
||||||
import org.libreccm.modules.ModuleManager;
|
import org.libreccm.pagemodel.ComponentModel;
|
||||||
import org.libreccm.pagemodel.ComponentModels;
|
import org.libreccm.pagemodel.ComponentModels;
|
||||||
import org.libreccm.pagemodel.PageModel;
|
import org.libreccm.pagemodel.PageModel;
|
||||||
|
import org.libreccm.pagemodel.PageModelComponentModel;
|
||||||
import org.libreccm.pagemodel.PageModelRepository;
|
import org.libreccm.pagemodel.PageModelRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -91,13 +100,9 @@ class PageModelDetails extends BoxPanel {
|
||||||
});
|
});
|
||||||
super.add(editProperties);
|
super.add(editProperties);
|
||||||
|
|
||||||
final ActionLink addComponent = new ActionLink(new GlobalizedMessage(
|
final AddComponentForm addComponentForm = new AddComponentForm(
|
||||||
"ui.admin.pagemodels.details.add_component",
|
pageModelTab);
|
||||||
AdminUiConstants.ADMIN_BUNDLE));
|
super.add(addComponentForm);
|
||||||
addComponent.addActionListener(event -> {
|
|
||||||
//pageModelTab.showNewComponentForm(state, componentModelClass);
|
|
||||||
});
|
|
||||||
super.add(addComponent);
|
|
||||||
|
|
||||||
final ComponentsTable componentsTable
|
final ComponentsTable componentsTable
|
||||||
= new ComponentsTable(
|
= new ComponentsTable(
|
||||||
|
|
@ -105,27 +110,91 @@ class PageModelDetails extends BoxPanel {
|
||||||
super.add(componentsTable);
|
super.add(componentsTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AddComponentForm extends Form {
|
private class AddComponentForm
|
||||||
|
extends Form
|
||||||
|
implements FormProcessListener {
|
||||||
|
|
||||||
|
private final PageModelTab pageModelTab;
|
||||||
private final SingleSelect selectType;
|
private final SingleSelect selectType;
|
||||||
|
|
||||||
public AddComponentForm() {
|
public AddComponentForm(final PageModelTab pageModelTab) {
|
||||||
super("pagemodel_add_component_form");
|
|
||||||
|
super("pagemodel_add_component_form",
|
||||||
|
new BoxPanel(BoxPanel.HORIZONTAL));
|
||||||
|
|
||||||
|
this.pageModelTab = pageModelTab;
|
||||||
|
|
||||||
|
final Label formLabel = new Label(new GlobalizedMessage(
|
||||||
|
"ui.admin.pagemodels.add_new_component",
|
||||||
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
|
super.add(formLabel);
|
||||||
|
|
||||||
selectType = new SingleSelect("select_component_type");
|
selectType = new SingleSelect("select_component_type");
|
||||||
|
selectType.setLabel(new GlobalizedMessage(
|
||||||
|
"ui.admin.pagemodels.add_new_component.type",
|
||||||
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
try {
|
try {
|
||||||
selectType.addPrintListener(event -> {
|
selectType
|
||||||
|
.addPrintListener(new ComponentModelSelectPrintListener());
|
||||||
|
} catch (TooManyListenersException ex) {
|
||||||
|
throw new UnexpectedErrorException(ex);
|
||||||
|
}
|
||||||
|
super.add(selectType);
|
||||||
|
|
||||||
|
final Submit submit = new Submit(new GlobalizedMessage(
|
||||||
|
"ui.admin.pagemodels.add_new_component.submit",
|
||||||
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
|
super.add(submit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(final FormSectionEvent event)
|
||||||
|
throws FormProcessException {
|
||||||
|
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
final String type = (String) selectType.getValue(state);
|
||||||
|
final Class<? extends ComponentModel> clazz = getClass(type);
|
||||||
|
|
||||||
|
pageModelTab.showNewComponentForm(state, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private Class<? extends ComponentModel> getClass(final String type) {
|
||||||
|
try {
|
||||||
|
return (Class<? extends ComponentModel>) Class.forName(type);
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
throw new UnexpectedErrorException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ComponentModelSelectPrintListener implements PrintListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prepare(final PrintEvent event) {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final ComponentModels componentModels = cdiUtil
|
final ComponentModels componentModels = cdiUtil
|
||||||
.findBean(ComponentModels.class);
|
.findBean(ComponentModels.class);
|
||||||
|
|
||||||
|
final SingleSelect target = (SingleSelect) event.getTarget();
|
||||||
|
target.clearOptions();
|
||||||
|
|
||||||
|
final List<PageModelComponentModel> models = componentModels
|
||||||
|
.findAvailableComponentModels();
|
||||||
|
for (final PageModelComponentModel model : models) {
|
||||||
|
target.addOption(createOption(model));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
});
|
private Option createOption(final PageModelComponentModel model) {
|
||||||
} catch (TooManyListenersException ex) {
|
|
||||||
throw new UnexpectedErrorException(ex);
|
final GlobalizedMessage title = new GlobalizedMessage(
|
||||||
}
|
model.titleKey(), model.descBundle());
|
||||||
|
|
||||||
|
return new Option(model.modelClass().getName(),
|
||||||
|
new Label(title));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,6 @@ class PageModelForm extends Form {
|
||||||
applicationSelect.setLabel(new GlobalizedMessage(
|
applicationSelect.setLabel(new GlobalizedMessage(
|
||||||
"ui.admin.pagemodels.application",
|
"ui.admin.pagemodels.application",
|
||||||
AdminUiConstants.ADMIN_BUNDLE));
|
AdminUiConstants.ADMIN_BUNDLE));
|
||||||
super.add(applicationSelect);
|
|
||||||
try {
|
try {
|
||||||
applicationSelect.addPrintListener(event -> {
|
applicationSelect.addPrintListener(event -> {
|
||||||
|
|
||||||
|
|
@ -324,6 +323,8 @@ class PageModelForm extends Form {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final PageModelRepository pageModelRepo = cdiUtil
|
final PageModelRepository pageModelRepo = cdiUtil
|
||||||
.findBean(PageModelRepository.class);
|
.findBean(PageModelRepository.class);
|
||||||
|
final PageModelManager pageModelManager = cdiUtil
|
||||||
|
.findBean(PageModelManager.class);
|
||||||
final ConfigurationManager confManager = cdiUtil
|
final ConfigurationManager confManager = cdiUtil
|
||||||
.findBean(ConfigurationManager.class);
|
.findBean(ConfigurationManager.class);
|
||||||
final ApplicationRepository appRepo = cdiUtil
|
final ApplicationRepository appRepo = cdiUtil
|
||||||
|
|
@ -335,9 +336,17 @@ class PageModelForm extends Form {
|
||||||
final String selectedModelIdStr = selectedModelId
|
final String selectedModelIdStr = selectedModelId
|
||||||
.getSelectedKey(state);
|
.getSelectedKey(state);
|
||||||
|
|
||||||
|
final CcmApplication application = appRepo
|
||||||
|
.retrieveApplicationForPath(appValue)
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
|
.format("No CcmApplication with primary URL \"%s\" in the "
|
||||||
|
+ "database.",
|
||||||
|
appValue)));
|
||||||
|
|
||||||
final PageModel pageModel;
|
final PageModel pageModel;
|
||||||
if (selectedModelIdStr == null || selectedModelIdStr.isEmpty()) {
|
if (selectedModelIdStr == null || selectedModelIdStr.isEmpty()) {
|
||||||
pageModel = new PageModel();
|
pageModel = pageModelManager.createPageModel(nameValue,
|
||||||
|
application);
|
||||||
} else {
|
} else {
|
||||||
pageModel = pageModelRepo
|
pageModel = pageModelRepo
|
||||||
.findById(Long.parseLong(selectedModelIdStr))
|
.findById(Long.parseLong(selectedModelIdStr))
|
||||||
|
|
@ -351,19 +360,12 @@ class PageModelForm extends Form {
|
||||||
pageModel.getTitle().addValue(defaultLocale, titleValue);
|
pageModel.getTitle().addValue(defaultLocale, titleValue);
|
||||||
pageModel.getDescription().addValue(defaultLocale, descValue);
|
pageModel.getDescription().addValue(defaultLocale, descValue);
|
||||||
|
|
||||||
final CcmApplication application = appRepo
|
|
||||||
.retrieveApplicationForPath(appValue)
|
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
|
||||||
.format("No CcmApplication with primary URL \"%s\" in the "
|
|
||||||
+ "database.",
|
|
||||||
appValue)));
|
|
||||||
|
|
||||||
pageModel.setApplication(application);
|
pageModel.setApplication(application);
|
||||||
|
|
||||||
pageModelRepo.save(pageModel);
|
pageModelRepo.save(pageModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
pageModelTab.showPageModelDetails(state);
|
pageModelTab.showPageModelsTable(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import org.libreccm.web.ApplicationRepository;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -154,7 +155,11 @@ class PageModelsController implements Serializable {
|
||||||
.format("No PageModel with ID %d in the database.",
|
.format("No PageModel with ID %d in the database.",
|
||||||
pageModelId)));
|
pageModelId)));
|
||||||
|
|
||||||
return model.getComponents();
|
final List<ComponentModel> components = new ArrayList<>();
|
||||||
|
for(final ComponentModel component : model.getComponents()) {
|
||||||
|
components.add(component);
|
||||||
|
}
|
||||||
|
return components;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
|
|
||||||
|
|
@ -168,8 +168,6 @@ class PageModelsTable extends Table {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Invalid value for column.");
|
"Invalid value for column.");
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -102,11 +102,21 @@ public class PageModelManager {
|
||||||
components.size());
|
components.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
@AuthorizationRequired
|
||||||
|
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
||||||
|
public PageModel createPageModel(final String name,
|
||||||
|
final CcmApplication application) {
|
||||||
|
|
||||||
|
return createPageModel(name, application, "");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link PageModel} for the provided application. The method
|
* Creates a new {@link PageModel} for the provided application. The method
|
||||||
* tries to retrieve the appropriate page model by using
|
* tries to retrieve the appropriate application by using
|
||||||
* {@link PageModelRepository#findByApplicationAndName(org.libreccm.web.CcmApplication, java.lang.String)}.
|
* {@link PageModelRepository#findByApplicationAndName(org.libreccm.web.CcmApplication, java.lang.String)}.
|
||||||
* Please note that this method will always return the <strong>live</strong>
|
* Please note that this method will always return the
|
||||||
|
* <strong>draft</strong>
|
||||||
* version of the page model.
|
* version of the page model.
|
||||||
*
|
*
|
||||||
* @param name The name of the new page model. Must be unique for the
|
* @param name The name of the new page model. Must be unique for the
|
||||||
|
|
|
||||||
|
|
@ -655,3 +655,27 @@ ui.admin.pagemodels.componentmodels.cols.delete.heading=Delete
|
||||||
ui.admin.pagemodels.components.edit=Edit
|
ui.admin.pagemodels.components.edit=Edit
|
||||||
ui.admin.pagemodels.components.delete=Delete
|
ui.admin.pagemodels.components.delete=Delete
|
||||||
ui.admin.pagemodels.details.add_component=Add Component
|
ui.admin.pagemodels.details.add_component=Add Component
|
||||||
|
ui.admin.pagemodels.add_new_component=Add new component
|
||||||
|
ui.admin.pagemodels.add_new_component.type=Type
|
||||||
|
ui.admin.pagemodels.add_new_component.submit=Create
|
||||||
|
ui.admin.tab.pagemodels.title=PageModels
|
||||||
|
ui.admin.pagemodels.add_new_pagemodel_link=Create new PageModel
|
||||||
|
ui.admin.pagemodels.table.empty_view=No PageModels available
|
||||||
|
ui.admin.pagemodels.create_new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.name=Name
|
||||||
|
ui.admin.pagemodels.title=Title
|
||||||
|
ui.admin.pagemodels.desc=Description
|
||||||
|
ui.admin.pagemodels.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.name=Name
|
||||||
|
ui.admin.pagemodels.table.columns.headers.title=Title
|
||||||
|
ui.admin.pagemodels.table.columns.headers.desc=Description
|
||||||
|
ui.admin.pagemodels.table.columns.headers.remove=Delete
|
||||||
|
\ \tui.admin.pagemodels.table.columns.remove.label=Delete
|
||||||
|
ui.admin.pagemodels.details.model_name=Name
|
||||||
|
ui.admin.pagemodels.details.model_title=Titel
|
||||||
|
ui.admin.pagemodels.details.model_application=Application
|
||||||
|
ui.admin.pagemodels.details.model_desc=Description
|
||||||
|
ui.admin.pagemodels.details.edit_properties=Edit properties
|
||||||
|
ui.admin.pagemodels.components.key.label=ID
|
||||||
|
ui.admin.pagemodels.components.key.error.not_empty=The ID of a component can't be empty.
|
||||||
|
|
|
||||||
|
|
@ -659,3 +659,27 @@ ui.admin.pagemodels.componentmodels.cols.delete.heading=Delete
|
||||||
ui.admin.pagemodels.components.edit=Bearbeiten
|
ui.admin.pagemodels.components.edit=Bearbeiten
|
||||||
ui.admin.pagemodels.components.delete=L\u00f6schen
|
ui.admin.pagemodels.components.delete=L\u00f6schen
|
||||||
ui.admin.pagemodels.details.add_component=Komponente hinzuf\u00fcgen
|
ui.admin.pagemodels.details.add_component=Komponente hinzuf\u00fcgen
|
||||||
|
ui.admin.pagemodels.add_new_component=Neue Komponente hinzuf\u00fcgen
|
||||||
|
ui.admin.pagemodels.add_new_component.type=Typ
|
||||||
|
ui.admin.pagemodels.add_new_component.submit=Hinzuf\u00fcgen
|
||||||
|
ui.admin.tab.pagemodels.title=PageModels
|
||||||
|
ui.admin.pagemodels.add_new_pagemodel_link=Neues PageModel anlegen
|
||||||
|
ui.admin.pagemodels.table.empty_view=Keine PageModels verf\u00fcgbar
|
||||||
|
ui.admin.pagemodels.create_new=Neues PageModel anlegen
|
||||||
|
ui.admin.pagemodels.name=Name
|
||||||
|
ui.admin.pagemodels.title=Titel
|
||||||
|
ui.admin.pagemodels.desc=Beschreibung
|
||||||
|
ui.admin.pagemodels.application=Applikation
|
||||||
|
ui.admin.pagemodels.table.columns.headers.application=Applikation
|
||||||
|
ui.admin.pagemodels.table.columns.headers.name=Name
|
||||||
|
ui.admin.pagemodels.table.columns.headers.title=Titel
|
||||||
|
ui.admin.pagemodels.table.columns.headers.desc=Description
|
||||||
|
ui.admin.pagemodels.table.columns.headers.remove=L\u00f6schen
|
||||||
|
\ \tui.admin.pagemodels.table.columns.remove.label=L\u00f6schen
|
||||||
|
ui.admin.pagemodels.details.model_name=Name
|
||||||
|
ui.admin.pagemodels.details.model_title=Titel
|
||||||
|
ui.admin.pagemodels.details.model_application=Applikation
|
||||||
|
ui.admin.pagemodels.details.model_desc=Beschreibung
|
||||||
|
ui.admin.pagemodels.details.edit_properties=Bearbeiten
|
||||||
|
ui.admin.pagemodels.components.key.label=ID
|
||||||
|
ui.admin.pagemodels.components.key.error.not_empty=Die ID einer Komponente darf nicht leer sein.
|
||||||
|
|
|
||||||
|
|
@ -652,3 +652,27 @@ ui.admin.pagemodels.componentmodels.cols.delete.heading=Delete
|
||||||
ui.admin.pagemodels.components.edit=Edit
|
ui.admin.pagemodels.components.edit=Edit
|
||||||
ui.admin.pagemodels.components.delete=Delete
|
ui.admin.pagemodels.components.delete=Delete
|
||||||
ui.admin.pagemodels.details.add_component=Add Component
|
ui.admin.pagemodels.details.add_component=Add Component
|
||||||
|
ui.admin.pagemodels.add_new_component=Add new component
|
||||||
|
ui.admin.pagemodels.add_new_component.type=Type
|
||||||
|
ui.admin.pagemodels.add_new_component.submit=Create
|
||||||
|
ui.admin.tab.pagemodels.title=PageModels
|
||||||
|
ui.admin.pagemodels.add_new_pagemodel_link=Create new PageModel
|
||||||
|
ui.admin.pagemodels.table.empty_view=No PageModels available
|
||||||
|
ui.admin.pagemodels.create_new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.name=Name
|
||||||
|
ui.admin.pagemodels.title=Title
|
||||||
|
ui.admin.pagemodels.desc=Description
|
||||||
|
ui.admin.pagemodels.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.name=Name
|
||||||
|
ui.admin.pagemodels.table.columns.headers.title=Title
|
||||||
|
ui.admin.pagemodels.table.columns.headers.desc=Description
|
||||||
|
ui.admin.pagemodels.table.columns.headers.remove=Delete
|
||||||
|
\ \tui.admin.pagemodels.table.columns.remove.label=Delete
|
||||||
|
ui.admin.pagemodels.details.model_name=Name
|
||||||
|
ui.admin.pagemodels.details.model_title=Titel
|
||||||
|
ui.admin.pagemodels.details.model_application=Application
|
||||||
|
ui.admin.pagemodels.details.model_desc=Description
|
||||||
|
ui.admin.pagemodels.details.edit_properties=Edit properties
|
||||||
|
ui.admin.pagemodels.components.key.label=ID
|
||||||
|
ui.admin.pagemodels.components.key.error.not_empty=The ID of a component can't be empty.
|
||||||
|
|
|
||||||
|
|
@ -643,3 +643,27 @@ ui.admin.pagemodels.componentmodels.cols.delete.heading=Delete
|
||||||
ui.admin.pagemodels.components.edit=Edit
|
ui.admin.pagemodels.components.edit=Edit
|
||||||
ui.admin.pagemodels.components.delete=Delete
|
ui.admin.pagemodels.components.delete=Delete
|
||||||
ui.admin.pagemodels.details.add_component=Add Component
|
ui.admin.pagemodels.details.add_component=Add Component
|
||||||
|
ui.admin.pagemodels.add_new_component=Add new component
|
||||||
|
ui.admin.pagemodels.add_new_component.type=Type
|
||||||
|
ui.admin.pagemodels.add_new_component.submit=Create
|
||||||
|
ui.admin.tab.pagemodels.title=PageModels
|
||||||
|
ui.admin.pagemodels.add_new_pagemodel_link=Create new PageModel
|
||||||
|
ui.admin.pagemodels.table.empty_view=No PageModels available
|
||||||
|
ui.admin.pagemodels.create_new=Create new PageModel
|
||||||
|
ui.admin.pagemodels.name=Name
|
||||||
|
ui.admin.pagemodels.title=Title
|
||||||
|
ui.admin.pagemodels.desc=Description
|
||||||
|
ui.admin.pagemodels.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.application=Application
|
||||||
|
ui.admin.pagemodels.table.columns.headers.name=Name
|
||||||
|
ui.admin.pagemodels.table.columns.headers.title=Title
|
||||||
|
ui.admin.pagemodels.table.columns.headers.desc=Description
|
||||||
|
ui.admin.pagemodels.table.columns.headers.remove=Delete
|
||||||
|
\ \tui.admin.pagemodels.table.columns.remove.label=Delete
|
||||||
|
ui.admin.pagemodels.details.model_name=Name
|
||||||
|
ui.admin.pagemodels.details.model_title=Titel
|
||||||
|
ui.admin.pagemodels.details.model_application=Application
|
||||||
|
ui.admin.pagemodels.details.model_desc=Description
|
||||||
|
ui.admin.pagemodels.details.edit_properties=Edit properties
|
||||||
|
ui.admin.pagemodels.components.key.label=ID
|
||||||
|
ui.admin.pagemodels.components.key.error.not_empty=The ID of a component can't be empty.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue