CCM NG: Setting index item for a category in the category of the Content Section Editor
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5168 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
85a5ace44a
commit
a73b951512
|
|
@ -18,17 +18,29 @@
|
|||
*/
|
||||
package com.arsdigita.cms.ui.category;
|
||||
|
||||
import org.libreccm.categorization.Categorization;
|
||||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.categorization.CategoryManager;
|
||||
import org.libreccm.categorization.CategoryRepository;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.libreccm.categorization.DomainOwnership;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.librecms.contentsection.ContentItem;
|
||||
import org.librecms.contentsection.ContentItemManager;
|
||||
import org.librecms.contentsection.ContentItemVersion;
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
import org.librecms.contentsection.ContentSectionRepository;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
|
|
@ -37,13 +49,22 @@ import org.librecms.contentsection.ContentSectionRepository;
|
|||
class CategoryAdminController {
|
||||
|
||||
@Inject
|
||||
private ContentSectionRepository sectionRepo;
|
||||
private CategoryManager categoryManager;
|
||||
|
||||
@Inject
|
||||
private EntityManager entityManager;
|
||||
private CategoryRepository categoryRepo;
|
||||
|
||||
@Inject
|
||||
private ContentItemManager itemManager;
|
||||
|
||||
@Inject
|
||||
private GlobalizationHelper globalizationHelper;
|
||||
|
||||
@Inject
|
||||
private ContentSectionRepository sectionRepo;
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<DomainOwnership> retrieveDomains(final ContentSection section) {
|
||||
protected List<DomainOwnership> retrieveDomains(final ContentSection section) {
|
||||
|
||||
Objects.requireNonNull(section);
|
||||
|
||||
|
|
@ -57,4 +78,56 @@ class CategoryAdminController {
|
|||
return new ArrayList<>(contentSection.getDomains());
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
protected List<CategoryListItem> generateSubCategoryList(
|
||||
final Category forCategory) {
|
||||
|
||||
Objects.requireNonNull(forCategory);
|
||||
|
||||
final Category category = categoryRepo
|
||||
.findById(forCategory.getObjectId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No Category with ID %d in the datbase.",
|
||||
forCategory.getObjectId())));
|
||||
|
||||
return category
|
||||
.getSubCategories()
|
||||
.stream()
|
||||
.map(this::createCategoryListItem)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private CategoryListItem createCategoryListItem(final Category category) {
|
||||
|
||||
final CategoryListItem item = new CategoryListItem();
|
||||
item.setCategoryId(category.getObjectId());
|
||||
|
||||
final String label = globalizationHelper
|
||||
.getValueFromLocalizedString(category.getTitle(), category::getName);
|
||||
item.setLabel(label);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
protected List<ContentItem> retrieveAssignedContentItems(
|
||||
final Category fromCategory) {
|
||||
|
||||
final Category category = categoryRepo
|
||||
.findById(fromCategory.getObjectId())
|
||||
.orElseThrow(() -> new IllegalArgumentException(String
|
||||
.format("No Category with ID %d in the datbase.",
|
||||
fromCategory.getObjectId())));
|
||||
|
||||
return category
|
||||
.getObjects()
|
||||
.stream()
|
||||
.map(Categorization::getCategorizedObject)
|
||||
.filter(obj -> obj instanceof ContentItem)
|
||||
.map(obj -> (ContentItem) obj)
|
||||
.filter(item -> itemManager.isLive(item))
|
||||
.filter(item -> item.getVersion() == ContentItemVersion.LIVE)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -272,15 +272,23 @@ public final class CategoryAdminPane extends BaseAdminPane<String> {
|
|||
|
||||
@Override
|
||||
protected final Object initialValue(final PageState state) {
|
||||
final String id = selectedCategory.getSelectedKey(state);
|
||||
|
||||
final String selectedCatetoryIdStr = selectedCategory
|
||||
.getSelectedKey(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryRepository repository = cdiUtil.findBean(
|
||||
CategoryRepository.class);
|
||||
if (id == null) {
|
||||
return null;
|
||||
final Category category;
|
||||
if (selectedCatetoryIdStr == null) {
|
||||
category = null;
|
||||
} else {
|
||||
return repository.findById(Long.parseLong(id));
|
||||
category = repository
|
||||
.findById(Long.parseLong(selectedCatetoryIdStr))
|
||||
.orElseThrow(() -> new UnexpectedErrorException(String
|
||||
.format("No Category with ID %s in the database.",
|
||||
selectedCatetoryIdStr)));
|
||||
}
|
||||
return category;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,12 +32,12 @@ import com.arsdigita.bebop.SingleSelectionModel;
|
|||
import com.arsdigita.bebop.form.Submit;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.ui.BaseItemPane;
|
||||
import com.arsdigita.cms.ui.CMSForm;
|
||||
import com.arsdigita.cms.ui.ContentItemPage;
|
||||
import com.arsdigita.cms.ui.VisibilityComponent;
|
||||
import com.arsdigita.cms.ui.templates.CategoryTemplates;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
import com.arsdigita.toolbox.ui.ActionGroup;
|
||||
import com.arsdigita.toolbox.ui.Property;
|
||||
|
|
@ -45,7 +45,6 @@ import com.arsdigita.toolbox.ui.PropertyList;
|
|||
import com.arsdigita.toolbox.ui.Section;
|
||||
import com.arsdigita.xml.Element;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
|
@ -56,12 +55,17 @@ import org.libreccm.categorization.CategoryManager;
|
|||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.configuration.ConfigurationManager;
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.security.PermissionChecker;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.ContentItem;
|
||||
import org.librecms.contentsection.ContentItemManager;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.contentsection.privileges.ItemPrivileges;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Edits a single category.
|
||||
*
|
||||
|
|
@ -100,7 +104,12 @@ class CategoryItemPane extends BaseItemPane {
|
|||
if (!super.isVisible(state)) {
|
||||
return false;
|
||||
}
|
||||
return !m_category.getCategory(state).getObjects().isEmpty();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final Category category = m_category.getCategory(state);
|
||||
return categoryManager.hasObjects(category);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -276,6 +285,7 @@ class CategoryItemPane extends BaseItemPane {
|
|||
final BaseLink viewIndexItem,
|
||||
final BaseLink editIndexItem,
|
||||
final ActionLink orderItemsLink) {
|
||||
|
||||
setHeading(new Label(gz("cms.ui.category.details")));
|
||||
|
||||
final ActionGroup group = new ActionGroup();
|
||||
|
|
@ -295,36 +305,67 @@ class CategoryItemPane extends BaseItemPane {
|
|||
private class Properties extends PropertyList {
|
||||
|
||||
@Override
|
||||
protected final java.util.List properties(final PageState state) {
|
||||
final java.util.List props = super.properties(state);
|
||||
final Category category = m_category.getCategory(state);
|
||||
protected final java.util.List<Property> properties(
|
||||
final PageState state) {
|
||||
|
||||
String itemTitle = "None";
|
||||
final java.util.List<Property> properties = super.properties(
|
||||
state);
|
||||
final Category category = m_category
|
||||
.getCategory(state);
|
||||
|
||||
if (category != null) {
|
||||
itemTitle = category.getDisplayName();
|
||||
final String itemTitle;
|
||||
|
||||
if (category == null) {
|
||||
itemTitle = "None";
|
||||
} else {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final List<CcmObject> indexObjects = categoryManager
|
||||
.getIndexObject(category);
|
||||
|
||||
final Optional<ContentItem> indexItem = indexObjects
|
||||
.stream()
|
||||
.filter(obj -> obj instanceof ContentItem)
|
||||
.map(obj -> (ContentItem) obj)
|
||||
.findFirst();
|
||||
|
||||
if (indexItem.isPresent()) {
|
||||
final GlobalizationHelper globalizationHelper = cdiUtil
|
||||
.findBean(GlobalizationHelper.class);
|
||||
|
||||
final ContentItem item = indexItem.get();
|
||||
itemTitle = globalizationHelper
|
||||
.getValueFromLocalizedString(item.getTitle(),
|
||||
item::getDisplayName);
|
||||
|
||||
} else {
|
||||
final CcmObject indexObj = indexObjects.get(0);
|
||||
itemTitle = Objects.toString(indexObj);
|
||||
}
|
||||
}
|
||||
|
||||
props.add(new Property(gz("cms.ui.name"),
|
||||
properties.add(new Property(gz("cms.ui.name"),
|
||||
category.getName()));
|
||||
props.add(new Property(gz("cms.ui.description"),
|
||||
properties.add(new Property(gz("cms.ui.description"),
|
||||
category.getDescription().getValue()));
|
||||
props.add(new Property(gz("cms.ui.category.is_not_abstract"),
|
||||
properties.add(new Property(
|
||||
gz("cms.ui.category.is_not_abstract"),
|
||||
category.isAbstractCategory()
|
||||
? gz("cms.ui.no")
|
||||
: gz("cms.ui.yes")));
|
||||
props.add(new Property(gz("cms.ui.cateogry.is_visible"),
|
||||
properties.add(new Property(gz("cms.ui.cateogry.is_visible"),
|
||||
category.isVisible()
|
||||
? gz("cms.ui.yes")
|
||||
: gz("cms.ui.no")));
|
||||
props.add(new Property(gz("cms.ui.category.is_enabled"),
|
||||
properties.add(new Property(gz("cms.ui.category.is_enabled"),
|
||||
category.isEnabled()
|
||||
? gz("cms.ui.yes")
|
||||
: gz("cms.ui.no")));
|
||||
props.add(new Property(gz("cms.ui.category.index_item"),
|
||||
properties.add(new Property(gz("cms.ui.category.index_item"),
|
||||
itemTitle));
|
||||
|
||||
return props;
|
||||
return properties;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -398,7 +439,13 @@ class CategoryItemPane extends BaseItemPane {
|
|||
|
||||
@Override
|
||||
public final boolean isVisible(final PageState state) {
|
||||
return m_category.getCategory(state).getParentCategory().isVisible();
|
||||
|
||||
final Category category = m_category.getCategory(state);
|
||||
if (category.getParentCategory() == null) {
|
||||
return false;
|
||||
} else {
|
||||
return category.getParentCategory().isVisible();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -567,17 +614,20 @@ class CategoryItemPane extends BaseItemPane {
|
|||
// the content. The prepareURL method is called by the printwriter
|
||||
@Override
|
||||
protected String prepareURL(final PageState state, String location) {
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager manager = cdiUtil.findBean(
|
||||
CategoryManager.class);
|
||||
final Category category = m_category.getCategory(state);
|
||||
|
||||
ContentItem indexItem = (ContentItem) manager
|
||||
.getIndexObject(m_category.getCategory(state))
|
||||
final ContentItem indexItem = (ContentItem) manager
|
||||
.getIndexObject(category)
|
||||
.stream()
|
||||
.findFirst()
|
||||
.get();
|
||||
return "/redirect/?oid=" + URLEncoder.encode(Long.toString(indexItem
|
||||
.getObjectId()));
|
||||
|
||||
return String.format("/redirect/?oid=%s",
|
||||
Long.toString(indexItem.getObjectId()));
|
||||
}
|
||||
|
||||
// We only show this link when an index item exists for this category
|
||||
|
|
@ -586,13 +636,12 @@ class CategoryItemPane extends BaseItemPane {
|
|||
if (!super.isVisible(state)) {
|
||||
return false;
|
||||
}
|
||||
Category /*ACSObject*/ indexItem = m_category
|
||||
.getCategory(state);//.getDirectIndexObject();
|
||||
if (indexItem == null) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
final Category category = m_category.getCategory(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
return categoryManager.hasIndexObject(category);
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -677,8 +726,9 @@ class CategoryItemPane extends BaseItemPane {
|
|||
|
||||
public MoveLink(final Label label) {
|
||||
super(label);
|
||||
alternativeLabel = new Label(GlobalizationUtil.globalize(
|
||||
"cms.ui.category.cantmoved"));
|
||||
alternativeLabel = new Label(new GlobalizedMessage(
|
||||
"cms.ui.category.cantmoved",
|
||||
CmsConstants.CMS_BUNDLE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -30,10 +30,12 @@ import com.arsdigita.bebop.list.ListModelBuilder;
|
|||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
import org.libreccm.categorization.Category;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* A List of all secondary parents of the current category.
|
||||
|
|
@ -81,13 +83,27 @@ public class CategoryLinks extends List {
|
|||
// Since this part is for non default parents, but there is only one... this is not needed anymore, i guess
|
||||
private class LinkedCategoryModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder {
|
||||
|
||||
@Override
|
||||
public ListModel makeModel(List list, PageState state) {
|
||||
final Category category = m_parent.getCategory(state);
|
||||
|
||||
if (category != null && category.getParentCategory() != null) {
|
||||
|
||||
java.util.List<Category> categories = new java.util.ArrayList<>();
|
||||
categories.add(category.getParentCategory());
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final GlobalizationHelper globalizationHelper =cdiUtil
|
||||
.findBean(GlobalizationHelper.class);
|
||||
final Category parent = category.getParentCategory();
|
||||
|
||||
java.util.List<CategoryListItem> categories = new ArrayList<>();
|
||||
final CategoryListItem parentItem = new CategoryListItem();
|
||||
parentItem.setCategoryId(parent.getObjectId());
|
||||
final String label = globalizationHelper
|
||||
.getValueFromLocalizedString(parent.getTitle(),
|
||||
parent::getName);
|
||||
parentItem.setLabel(label);
|
||||
|
||||
categories.add(parentItem);
|
||||
|
||||
return new CategoryListModel
|
||||
(categories,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* 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.category;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
class CategoryListItem implements Comparable<CategoryListItem> {
|
||||
|
||||
private long categoryId;
|
||||
private String label;
|
||||
|
||||
public long getCategoryId() {
|
||||
return categoryId;
|
||||
}
|
||||
|
||||
public void setCategoryId(final long categoryId) {
|
||||
this.categoryId = categoryId;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setLabel(final String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final CategoryListItem other) {
|
||||
|
||||
final int result = label.compareTo(other.getLabel());
|
||||
if (result == 0) {
|
||||
return Long.compare(categoryId, other.getCategoryId());
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 67 * hash + (int) (categoryId ^ (categoryId >>> 32));
|
||||
hash = 67 * hash + Objects.hashCode(label);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (!(obj instanceof CategoryListItem)) {
|
||||
return false;
|
||||
}
|
||||
final CategoryListItem other = (CategoryListItem) obj;
|
||||
if (!other.canEqual(this)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (categoryId != other.getCategoryId()) {
|
||||
return false;
|
||||
}
|
||||
return Objects.equals(label, other.getLabel());
|
||||
}
|
||||
|
||||
public boolean canEqual(final Object obj) {
|
||||
return obj instanceof CategoryListItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return toString("");
|
||||
}
|
||||
|
||||
public String toString(final String data) {
|
||||
return String.format("%s{ "
|
||||
+ "categoryId = %d,"
|
||||
+ "label = \"%s\"%s"
|
||||
+ " }",
|
||||
super.toString(),
|
||||
categoryId,
|
||||
label,
|
||||
data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -19,8 +19,8 @@
|
|||
package com.arsdigita.cms.ui.category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import org.libreccm.categorization.Category;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
|
|
@ -28,39 +28,44 @@ import java.util.Iterator;
|
|||
* A {@link ListModel} that iterates over categories via a cursor.
|
||||
*
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a>
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public final class CategoryListModel implements ListModel {
|
||||
|
||||
private Category m_cat;
|
||||
private long m_excludedID;
|
||||
private Iterator<Category> iterator;
|
||||
class CategoryListModel implements ListModel {
|
||||
|
||||
private final Iterator<CategoryListItem> iterator;
|
||||
private CategoryListItem currentCategory;
|
||||
private Long excludedCategoryId;
|
||||
|
||||
/**
|
||||
* Constructs a new <code>CategoryListModel</code>
|
||||
*
|
||||
* @param categories
|
||||
*/
|
||||
public CategoryListModel(List<Category> coll) {
|
||||
this(coll, -1); //Hopefully a decent replacement for null in BigDecimal. Negative ids would be weird...
|
||||
public CategoryListModel(final List<CategoryListItem> categories) {
|
||||
this(categories, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>CategoryListModel</code>
|
||||
*/
|
||||
public CategoryListModel(List<Category> coll,
|
||||
long excludedID) {
|
||||
public CategoryListModel(final List<CategoryListItem> categories,
|
||||
final Long excludedCategoryId) {
|
||||
|
||||
m_excludedID = excludedID;
|
||||
m_cat = null;
|
||||
iterator = coll.iterator();
|
||||
iterator = categories.iterator();
|
||||
this.excludedCategoryId = excludedCategoryId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean next() {
|
||||
if (iterator.hasNext()) {
|
||||
final Category category = iterator.next();
|
||||
if (Long.parseLong(category.getUniqueId()) == m_excludedID) {
|
||||
|
||||
final CategoryListItem next = iterator.next();
|
||||
if (excludedCategoryId != null
|
||||
&& next.getCategoryId() == excludedCategoryId) {
|
||||
|
||||
return next();
|
||||
} else {
|
||||
m_cat = category;
|
||||
currentCategory = next;
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -68,26 +73,19 @@ public final class CategoryListModel implements ListModel {
|
|||
}
|
||||
}
|
||||
|
||||
private Category getCategory() {
|
||||
if ( m_cat == null ) {
|
||||
throw new IllegalStateException("call next() first");
|
||||
}
|
||||
return m_cat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the name of the category.
|
||||
* Reads the label of the {@link CategoryListItem}.
|
||||
*
|
||||
*
|
||||
* Quasimodo:
|
||||
* Modified to ensure that the value is read from Category (and not the
|
||||
* localized version). This is necessary because we are in the admin GUI,
|
||||
* a localized version would be confusing.
|
||||
*/
|
||||
@Override
|
||||
public Object getElement() {
|
||||
return getCategory().getName();
|
||||
return currentCategory.getLabel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return getCategory().getUniqueId();
|
||||
return Long.toString(currentCategory.getCategoryId());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,10 +33,14 @@ import com.arsdigita.bebop.table.TableModel;
|
|||
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.l10n.GlobalizedMessagesUtil;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
import org.libreccm.security.PermissionChecker;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -54,18 +58,22 @@ import java.util.Locale;
|
|||
* @author Sören Bernstein <quasi@quasiweb.de>
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a>
|
||||
*/
|
||||
public class CategoryLocalizationTable extends Table implements TableActionListener {
|
||||
public class CategoryLocalizationTable extends Table implements
|
||||
TableActionListener {
|
||||
|
||||
private static final String TABLE_COL_LANG = "table_col_lang";
|
||||
private static final String TABLE_COL_DEL = "table_col_del";
|
||||
|
||||
private final CategoryRequestLocal m_category;
|
||||
private final SingleSelectionModel m_model;
|
||||
private final String TABLE_COL_LANG = "table_col_lang";
|
||||
private final String TABLE_COL_DEL = "table_col_del";
|
||||
private final SingleSelectionModel m_catLocale;
|
||||
|
||||
/**
|
||||
* Creates a new instance of CategoryLocalizationTable
|
||||
*/
|
||||
public CategoryLocalizationTable(final CategoryRequestLocal category, final SingleSelectionModel model, SingleSelectionModel catLocale) {
|
||||
public CategoryLocalizationTable(final CategoryRequestLocal category,
|
||||
final SingleSelectionModel model,
|
||||
final SingleSelectionModel catLocale) {
|
||||
|
||||
super();
|
||||
|
||||
|
|
@ -73,30 +81,52 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
m_model = model;
|
||||
m_catLocale = catLocale;
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final GlobalizationHelper globalizationHelper = cdiUtil
|
||||
.findBean(GlobalizationHelper.class);
|
||||
final GlobalizedMessagesUtil messagesUtil = globalizationHelper
|
||||
.getGlobalizedMessagesUtil(CmsConstants.CMS_BUNDLE);
|
||||
|
||||
// if table is empty:
|
||||
setEmptyView(new Label(GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_none")));
|
||||
TableColumnModel tab_model = getColumnModel();
|
||||
setEmptyView(new Label(messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.localization_none")));
|
||||
final TableColumnModel columnModel = getColumnModel();
|
||||
|
||||
// define columns
|
||||
// XXX globalize
|
||||
tab_model.add(new TableColumn(0, GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization.locale").localize(), TABLE_COL_LANG));
|
||||
tab_model.add(new TableColumn(1, GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_name").localize()));
|
||||
tab_model.add(new TableColumn(2, GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_description").localize()));
|
||||
tab_model.add(new TableColumn(3, GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_url").localize()));
|
||||
tab_model.add(new TableColumn(4, GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_action").localize(), TABLE_COL_DEL));
|
||||
columnModel.add(new TableColumn(
|
||||
0,
|
||||
messagesUtil.getGlobalizedMessage(
|
||||
"cms.ui.category.localization.locale")
|
||||
.localize(),
|
||||
TABLE_COL_LANG));
|
||||
columnModel.add(new TableColumn(
|
||||
1,
|
||||
messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.localization_name")
|
||||
.localize()));
|
||||
columnModel.add(new TableColumn(
|
||||
2,
|
||||
messagesUtil.getGlobalizedMessage(
|
||||
"cms.ui.category.localization_description")
|
||||
.localize()));
|
||||
columnModel.add(new TableColumn(
|
||||
3,
|
||||
messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.localization_url")
|
||||
.localize()));
|
||||
columnModel.add(new TableColumn(
|
||||
4,
|
||||
messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.localization_action")
|
||||
.localize(),
|
||||
TABLE_COL_DEL));
|
||||
|
||||
setModelBuilder(new CategoryLocalizationTableModelBuilder());
|
||||
super.setModelBuilder(new CategoryLocalizationTableModelBuilder());
|
||||
|
||||
tab_model.get(0).setCellRenderer(new EditCellRenderer());
|
||||
tab_model.get(4).setCellRenderer(new DeleteCellRenderer());
|
||||
columnModel.get(0).setCellRenderer(new EditCellRenderer());
|
||||
columnModel.get(4).setCellRenderer(new DeleteCellRenderer());
|
||||
|
||||
addTableActionListener(this);
|
||||
super.addTableActionListener(this);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -116,6 +146,7 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
return Table.EMPTY_MODEL;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -128,7 +159,8 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
private ArrayList<LocalizedString> localizedStringCollection;
|
||||
private LocalizedString m_categoryLocalization;
|
||||
|
||||
private CategoryLocalizationTableModel(Table t, PageState ps, Category category) {
|
||||
private CategoryLocalizationTableModel(Table t, PageState ps,
|
||||
Category category) {
|
||||
m_table = t;
|
||||
localizedStringCollection = new ArrayList<>();
|
||||
localizedStringCollection.add(category.getTitle());
|
||||
|
|
@ -194,33 +226,43 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
return null;
|
||||
// return m_categoryLocalization.getID();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class EditCellRenderer extends LockableImpl implements TableCellRenderer {
|
||||
private class EditCellRenderer extends LockableImpl implements
|
||||
TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value,
|
||||
boolean isSelected, final Object key,
|
||||
int row, int column) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(PermissionChecker.class);
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||
PermissionChecker.class);
|
||||
|
||||
if (permissionChecker.isPermitted(AdminPrivileges.ADMINISTER_CATEGORIES, m_category.getCategory(state))) {
|
||||
if (permissionChecker.isPermitted(
|
||||
AdminPrivileges.ADMINISTER_CATEGORIES, m_category.getCategory(
|
||||
state))) {
|
||||
return new ControlLink(value.toString());
|
||||
} else {
|
||||
return new Label(GlobalizationUtil.globalize(value.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer {
|
||||
private class DeleteCellRenderer extends LockableImpl implements
|
||||
TableCellRenderer {
|
||||
|
||||
public Component getComponent(Table table, PageState state, Object value,
|
||||
boolean isSelected, Object key,
|
||||
int row, int column) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(PermissionChecker.class);
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||
PermissionChecker.class);
|
||||
|
||||
if (permissionChecker.isPermitted(AdminPrivileges.ADMINISTER_CATEGORIES, m_category.getCategory(state))) {
|
||||
if (permissionChecker.isPermitted(
|
||||
AdminPrivileges.ADMINISTER_CATEGORIES, m_category.getCategory(
|
||||
state))) {
|
||||
ControlLink link = new ControlLink(value.toString());
|
||||
link.setConfirmation(GlobalizationUtil.globalize(
|
||||
"cms.ui.category.localization_confirm_delete"));
|
||||
|
|
@ -229,6 +271,7 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -259,7 +302,6 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
// if (col.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
|
||||
// category.delLanguage(categoryLocalization.getLocale());
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -269,4 +311,5 @@ public class CategoryLocalizationTable extends Table implements TableActionListe
|
|||
public void headSelected(TableActionEvent e) {
|
||||
throw new UnsupportedOperationException("Not Implemented");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,9 +18,17 @@
|
|||
*/
|
||||
package com.arsdigita.cms.ui.category;
|
||||
|
||||
import com.arsdigita.bebop.*;
|
||||
import com.arsdigita.bebop.event.FormProcessListener;
|
||||
import com.arsdigita.bebop.ColumnPanel;
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.FormData;
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.Link;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SaveCancelSection;
|
||||
import com.arsdigita.bebop.Text;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.form.FormErrorDisplay;
|
||||
import com.arsdigita.bebop.form.Option;
|
||||
import com.arsdigita.bebop.form.RadioGroup;
|
||||
|
|
@ -28,105 +36,148 @@ import com.arsdigita.bebop.form.Submit;
|
|||
import com.arsdigita.bebop.parameters.ParameterData;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.cms.CMS;
|
||||
import com.arsdigita.cms.ui.CMSForm;
|
||||
import com.arsdigita.cms.ui.FormSecurityListener;
|
||||
import com.arsdigita.util.Assert;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.libreccm.categorization.*;
|
||||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.categorization.CategoryManager;
|
||||
import org.libreccm.categorization.CategoryRepository;
|
||||
import org.libreccm.categorization.ObjectNotAssignedToCategoryException;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.librecms.contentsection.*;
|
||||
import org.libreccm.core.UnexpectedErrorException;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.l10n.GlobalizedMessagesUtil;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.ContentItem;
|
||||
import org.librecms.contentsection.ContentItemManager;
|
||||
import org.librecms.contentsection.ContentItemRepository;
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
import org.librecms.contentsection.ContentSectionManager;
|
||||
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.dispatcher.ItemResolver;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.TooManyListenersException;
|
||||
|
||||
/**
|
||||
* Allows the user to select an index item to display when the front end user is
|
||||
* browsing by Category
|
||||
*
|
||||
* @author Randy Graebner (randyg@alum.mit.edu)
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a> +
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a>
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class IndexItemSelectionForm extends CMSForm {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(
|
||||
IndexItemSelectionForm.class);
|
||||
|
||||
private final CategoryRequestLocal m_category;
|
||||
private RadioGroup m_options;
|
||||
private static final String NULL_OPTION_VALUE = "";
|
||||
private static final String NONE_OPTION_VALUE = "None";
|
||||
|
||||
private SaveCancelSection m_saveCancelSection;
|
||||
private final CategoryRequestLocal selectedCategory;
|
||||
private RadioGroup optionsGroup;
|
||||
private final SaveCancelSection saveCancelSection;
|
||||
|
||||
public IndexItemSelectionForm(final CategoryRequestLocal selectedCategory) {
|
||||
|
||||
public IndexItemSelectionForm(CategoryRequestLocal m) {
|
||||
super("EditCategory");
|
||||
super.setMethod(Form.POST);
|
||||
|
||||
this.selectedCategory = selectedCategory;
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ContentSectionManager sectionManager = cdiUtil.findBean(
|
||||
ContentSectionManager.class);
|
||||
final CategoryManager categoryManager = cdiUtil.findBean(
|
||||
CategoryManager.class);
|
||||
final CategoryRepository categoryRepository = cdiUtil.findBean(
|
||||
CategoryRepository.class);
|
||||
final ContentItemManager contentItemManager = cdiUtil.findBean(
|
||||
ContentItemManager.class);
|
||||
final ContentItemRepository contentItemRepository = cdiUtil.findBean(
|
||||
ContentItemRepository.class);
|
||||
|
||||
setMethod(Form.POST);
|
||||
|
||||
m_category = m;
|
||||
final GlobalizationHelper globalizationHelper = cdiUtil
|
||||
.findBean(GlobalizationHelper.class);
|
||||
final GlobalizedMessagesUtil messagesUtil = globalizationHelper
|
||||
.getGlobalizedMessagesUtil(CmsConstants.CMS_BUNDLE);
|
||||
|
||||
// Form header
|
||||
Label header = new Label(GlobalizationUtil.globalize(
|
||||
"cms.ui.category.select_index_item"));
|
||||
final Label header = new Label(messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.select_index_item"));
|
||||
header.setFontWeight(Label.BOLD);
|
||||
add(header, ColumnPanel.FULL_WIDTH);
|
||||
super.add(header, ColumnPanel.FULL_WIDTH);
|
||||
|
||||
// Form errors
|
||||
FormErrorDisplay m_errors = new FormErrorDisplay(this);
|
||||
add(m_errors, ColumnPanel.FULL_WIDTH);
|
||||
final FormErrorDisplay errorsDisplay = new FormErrorDisplay(this);
|
||||
super.add(errorsDisplay, ColumnPanel.FULL_WIDTH);
|
||||
|
||||
// Option Group
|
||||
m_options = new RadioGroup(new StringParameter("items"));
|
||||
optionsGroup = new RadioGroup(new StringParameter("items"));
|
||||
try {
|
||||
m_options.addPrintListener(event -> {
|
||||
RadioGroup group = (RadioGroup) event.getTarget();
|
||||
PageState state = event.getPageState();
|
||||
Category category = getCategory(event.getPageState());
|
||||
java.util.List<Categorization> children = category.getObjects();
|
||||
optionsGroup.addPrintListener(this::printOptionsGroup);
|
||||
} catch (TooManyListenersException ex) {
|
||||
LOGGER.error("Error adding init listener to Radio Group", ex);
|
||||
throw new UnexpectedErrorException(ex);
|
||||
}
|
||||
optionsGroup.setLayout(RadioGroup.VERTICAL);
|
||||
super.add(optionsGroup);
|
||||
|
||||
// Save and cancel buttons
|
||||
saveCancelSection = new SaveCancelSection();
|
||||
super.add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
|
||||
|
||||
super.addSubmissionListener(new FormSecurityListener(
|
||||
AdminPrivileges.ADMINISTER_CATEGORIES));
|
||||
|
||||
// Process listener
|
||||
super.addProcessListener(this::process);
|
||||
}
|
||||
|
||||
private void printOptionsGroup(final PrintEvent event) {
|
||||
|
||||
final RadioGroup group = (RadioGroup) event.getTarget();
|
||||
final PageState state = event.getPageState();
|
||||
final Category category = getCategory(event.getPageState());
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryAdminController controller = cdiUtil
|
||||
.findBean(CategoryAdminController.class);
|
||||
final ContentItemManager itemManager = cdiUtil
|
||||
.findBean(ContentItemManager.class);
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final ContentSectionManager sectionManager = cdiUtil
|
||||
.findBean(ContentSectionManager.class);
|
||||
final GlobalizationHelper globalizationHelper = cdiUtil
|
||||
.findBean(GlobalizationHelper.class);
|
||||
final GlobalizedMessagesUtil messagesUtil = globalizationHelper
|
||||
.getGlobalizedMessagesUtil(CmsConstants.CMS_BUNDLE);
|
||||
|
||||
group.clearOptions();
|
||||
|
||||
// option for NO index Object
|
||||
group.addOption(new Option(NONE_OPTION_VALUE,
|
||||
new Label(GlobalizationUtil
|
||||
.globalize(
|
||||
"cms.ui.category.non_option"))));
|
||||
group.addOption(
|
||||
new Option(NONE_OPTION_VALUE,
|
||||
new Label(messagesUtil
|
||||
.getGlobalizedMessage("cms.ui.category.non_option"))));
|
||||
|
||||
// option for inheriting from the parent category
|
||||
if (category.getParentCategory() != null) {
|
||||
group.addOption(new Option(NULL_OPTION_VALUE,
|
||||
new Label(GlobalizationUtil
|
||||
.globalize(
|
||||
group.addOption(
|
||||
new Option(NULL_OPTION_VALUE,
|
||||
new Label(messagesUtil
|
||||
.getGlobalizedMessage(
|
||||
"cms.ui.category.inherit_parent"))));
|
||||
}
|
||||
|
||||
final ContentSection section = CMS.getContext()
|
||||
.getContentSection();
|
||||
final ItemResolver itemResolver = sectionManager
|
||||
.getItemResolver(
|
||||
section);
|
||||
for (Categorization child : children) {
|
||||
ContentItem item = (ContentItem) child
|
||||
.getCategorizedObject();
|
||||
Link link = new Link(
|
||||
.getItemResolver(section);
|
||||
|
||||
final List<ContentItem> assignedItems = controller
|
||||
.retrieveAssignedContentItems(category);
|
||||
for (final ContentItem item : assignedItems) {
|
||||
|
||||
final Link link = new Link(
|
||||
new Text(item.getDisplayName()),
|
||||
itemResolver.generateItemURL(
|
||||
state,
|
||||
|
|
@ -136,74 +187,72 @@ public class IndexItemSelectionForm extends CMSForm {
|
|||
item.getVersion().name()
|
||||
)
|
||||
);
|
||||
Component linkComponent = link;
|
||||
//add the option with the link
|
||||
group.addOption(new Option(item.getItemUuid(),
|
||||
linkComponent));
|
||||
group.addOption(new Option(Long.toString(item.getObjectId()), link));
|
||||
}
|
||||
|
||||
// get currently selected item
|
||||
Optional<CcmObject> optionalIndexObject = categoryManager
|
||||
final Optional<CcmObject> optionalIndexObject = categoryManager
|
||||
.getIndexObject(category)
|
||||
.stream()
|
||||
.findFirst();
|
||||
if (optionalIndexObject.isPresent()) {
|
||||
ContentItem indexItem = (ContentItem) optionalIndexObject
|
||||
final ContentItem indexItem
|
||||
= (ContentItem) optionalIndexObject
|
||||
.get();
|
||||
final ContentItem liveItem = itemManager
|
||||
.getLiveVersion(indexItem, ContentItem.class)
|
||||
.get();
|
||||
group.setValue(
|
||||
state,
|
||||
contentItemManager.getDraftVersion(indexItem,
|
||||
ContentItem.class)
|
||||
.getItemUuid()
|
||||
);
|
||||
Long.toString(liveItem.getObjectId()));
|
||||
} else {
|
||||
String value = category.getParentCategory() != null
|
||||
? NULL_OPTION_VALUE
|
||||
: NONE_OPTION_VALUE;
|
||||
final String value;
|
||||
if (category.getParentCategory() == null) {
|
||||
value = NULL_OPTION_VALUE;
|
||||
} else {
|
||||
value = NONE_OPTION_VALUE;
|
||||
}
|
||||
group.setValue(state, value);
|
||||
}
|
||||
});
|
||||
} catch (java.util.TooManyListenersException e) {
|
||||
LOGGER.error("Error adding init listener to Radio Group", e);
|
||||
throw new UncheckedWrapperException(e);
|
||||
}
|
||||
m_options.setLayout(RadioGroup.VERTICAL);
|
||||
add(m_options);
|
||||
|
||||
// Save and cancel buttons
|
||||
m_saveCancelSection = new SaveCancelSection();
|
||||
add(m_saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
|
||||
private void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
|
||||
addSubmissionListener(new FormSecurityListener(
|
||||
AdminPrivileges.ADMINISTER_CATEGORIES));
|
||||
final FormData data = event.getFormData();
|
||||
final ParameterData param = data
|
||||
.getParameter(optionsGroup.getParameterModel().getName());
|
||||
final String selectedValue = (String) param.getValue();
|
||||
|
||||
// Process listener
|
||||
addProcessListener(event -> {
|
||||
PageState state = event.getPageState();
|
||||
FormData data = event.getFormData();
|
||||
ParameterData param = data.getParameter(m_options
|
||||
.getParameterModel().getName());
|
||||
String selectedValue = (String) param.getValue();
|
||||
final Category category = getCategory(event.getPageState());
|
||||
|
||||
Category category
|
||||
= getCategory(event.getPageState());
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final CategoryRepository categoryRepository = cdiUtil
|
||||
.findBean(CategoryRepository.class);
|
||||
final ContentItemManager contentItemManager = cdiUtil
|
||||
.findBean(ContentItemManager.class);
|
||||
final ContentItemRepository contentItemRepository = cdiUtil
|
||||
.findBean(ContentItemRepository.class);
|
||||
|
||||
if (selectedValue != null) {
|
||||
Optional<ContentItem> optionalItem = contentItemRepository
|
||||
final Optional<ContentItem> optionalItem = contentItemRepository
|
||||
.findById(Long.parseLong(selectedValue));
|
||||
if (optionalItem.isPresent()) {
|
||||
ContentItem item = contentItemManager.getDraftVersion(
|
||||
optionalItem.get(), ContentItem.class);
|
||||
final ContentItem item = contentItemManager
|
||||
.getLiveVersion(optionalItem.get(),
|
||||
ContentItem.class)
|
||||
.get();
|
||||
try {
|
||||
categoryManager.setIndexObject(category, item);
|
||||
categoryRepository.save(category);
|
||||
} catch (ObjectNotAssignedToCategoryException e) {
|
||||
throw new FormProcessException(e);
|
||||
} catch (ObjectNotAssignedToCategoryException ex) {
|
||||
throw new FormProcessException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -212,7 +261,7 @@ public class IndexItemSelectionForm extends CMSForm {
|
|||
* @return The cancel button
|
||||
*/
|
||||
protected Submit getCancelButton() {
|
||||
return m_saveCancelSection.getCancelButton();
|
||||
return saveCancelSection.getCancelButton();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -224,9 +273,8 @@ public class IndexItemSelectionForm extends CMSForm {
|
|||
*
|
||||
* @pre ( state != null )
|
||||
*/
|
||||
protected Category getCategory(PageState state) {
|
||||
Category category = m_category.getCategory(state);
|
||||
return category;
|
||||
protected Category getCategory(final PageState state) {
|
||||
return selectedCategory.getCategory(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,66 +23,113 @@ import com.arsdigita.bebop.List;
|
|||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.SingleSelectionModel;
|
||||
import com.arsdigita.bebop.event.ActionEvent;
|
||||
import com.arsdigita.bebop.event.ActionListener;
|
||||
import com.arsdigita.bebop.list.ListModel;
|
||||
import com.arsdigita.bebop.list.ListModelBuilder;
|
||||
import com.arsdigita.bebop.util.GlobalizationUtil;
|
||||
import com.arsdigita.util.LockableImpl;
|
||||
|
||||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.categorization.CategoryManager;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
|
||||
/**
|
||||
* A List of all subcategories of the current category.
|
||||
*
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a>
|
||||
*
|
||||
* @author Stanislav Freidin (stas@arsdigita.com)
|
||||
* @author Michael Pih (pihman@arsdigita.com)
|
||||
* @version $Revision: #15 $ $DateTime: 2004/08/17 23:15:09 $
|
||||
* @author <a href="mailto:yannick.buelter@yabue.de">Yannick Bülter</a>
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public class SubcategoryList extends SortableCategoryList {
|
||||
private final CategoryRequestLocal m_parent;
|
||||
private final SingleSelectionModel m_model;
|
||||
|
||||
public SubcategoryList(final CategoryRequestLocal parent,
|
||||
final SingleSelectionModel model) {
|
||||
super(parent);
|
||||
private final CategoryRequestLocal parentCategory;
|
||||
private final SingleSelectionModel<String> selectedCategoryId;
|
||||
|
||||
m_parent = parent;
|
||||
m_model = model;
|
||||
public SubcategoryList(
|
||||
final CategoryRequestLocal parentCategory,
|
||||
final SingleSelectionModel<String> selectedCategoryId) {
|
||||
|
||||
setIdAttr("subcategories_list");
|
||||
super(parentCategory);
|
||||
|
||||
this.parentCategory = parentCategory;
|
||||
this.selectedCategoryId = selectedCategoryId;
|
||||
|
||||
super.setIdAttr("subcategories_list");
|
||||
|
||||
setModelBuilder(new SubcategoryModelBuilder());
|
||||
|
||||
// Select the category in the main tree when the
|
||||
// user selects it here
|
||||
addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
final PageState state = event.getPageState();
|
||||
final String id = (String) getSelectedKey(state);
|
||||
super.addActionListener(this::actionPerformed);
|
||||
|
||||
if (id != null) {
|
||||
m_model.setSelectedKey(state, id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Label label = new Label(GlobalizationUtil.globalize
|
||||
("cms.ui.category.subcategory.none"));
|
||||
Label label = new Label(GlobalizationUtil.globalize(
|
||||
"cms.ui.category.subcategory.none"));
|
||||
label.setFontWeight(Label.ITALIC);
|
||||
setEmptyView(label);
|
||||
}
|
||||
|
||||
/**
|
||||
* Select the category in the main tree when the user selects it here
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
private void actionPerformed(final ActionEvent event) {
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
final String categoryId = (String) getSelectedKey(state);
|
||||
|
||||
if (categoryId != null) {
|
||||
selectedCategoryId.setSelectedKey(state, categoryId);
|
||||
}
|
||||
}
|
||||
|
||||
public ListModel makeMake(final List list, final PageState state) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final Category category = parentCategory.getCategory(state);
|
||||
|
||||
if (category != null
|
||||
&& categoryManager.hasSubCategories(category)) {
|
||||
|
||||
final CategoryAdminController controller = cdiUtil.findBean(
|
||||
CategoryAdminController.class);
|
||||
final java.util.List<CategoryListItem> children = controller
|
||||
.generateSubCategoryList(category);
|
||||
|
||||
return new CategoryListModel(children);
|
||||
} else {
|
||||
return List.EMPTY_MODEL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class SubcategoryModelBuilder extends LockableImpl
|
||||
implements ListModelBuilder {
|
||||
public ListModel makeModel(List list, PageState state) {
|
||||
final Category category = m_parent.getCategory(state);
|
||||
|
||||
if (category != null && !category.getSubCategories().isEmpty()) {
|
||||
java.util.List<Category> children = category.getSubCategories();
|
||||
@Override
|
||||
public ListModel makeModel(final List list, final PageState state) {
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CategoryManager categoryManager = cdiUtil
|
||||
.findBean(CategoryManager.class);
|
||||
final Category category = parentCategory.getCategory(state);
|
||||
|
||||
if (category != null
|
||||
&& categoryManager.hasSubCategories(category)) {
|
||||
|
||||
final CategoryAdminController controller = cdiUtil.findBean(
|
||||
CategoryAdminController.class);
|
||||
final java.util.List<CategoryListItem> children = controller
|
||||
.generateSubCategoryList(category);
|
||||
|
||||
return new CategoryListModel(children);
|
||||
} else {
|
||||
return List.EMPTY_MODEL;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue