/*
* (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl.html
*
* 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.
*
* Contributors:
* Anahide Tchertchian
*/
package org.nuxeo.ecm.platform.contentview.jsf;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.nuxeo.common.xmap.annotation.XNode;
import org.nuxeo.common.xmap.annotation.XNodeList;
import org.nuxeo.common.xmap.annotation.XObject;
import org.nuxeo.ecm.platform.query.core.CoreQueryPageProviderDescriptor;
import org.nuxeo.ecm.platform.query.core.GenericPageProviderDescriptor;
import org.nuxeo.ecm.platform.query.core.ReferencePageProviderDescriptor;
/**
* Descriptor for content view registration.
*
* @author Anahide Tchertchian
* @since 5.4
*/
@XObject("contentView")
public class ContentViewDescriptor {
@XNode("@name")
String name;
@XNode("@enabled")
boolean enabled = true;
@XNode("title")
String title;
@XNode("translateTitle")
Boolean translateTitle;
@XNode("emptySentence")
String emptySentence;
@XNode("translateEmptySentence")
Boolean translateEmptySentence;
@XNode("iconPath")
String iconPath;
@XNode("coreQueryPageProvider")
CoreQueryPageProviderDescriptor coreQueryPageProvider;
@XNode("genericPageProvider")
GenericPageProviderDescriptor genericPageProvider;
@XNode("pageProvider")
ReferencePageProviderDescriptor referencePageProvider;
@XNode("selectionList")
String selectionList;
@XNode("pagination")
String pagination;
@XNodeList(value = "actions@category", type = ArrayList.class, componentType = String.class)
List<String> actionCategories;
@XNode("searchDocument")
String searchDocument;
@XNode("searchLayout")
ContentViewLayoutImpl searchLayout;
@XNode("resultLayouts@append")
Boolean appendResultLayouts;
@XNodeList(value = "resultLayouts/layout", type = ArrayList.class, componentType = ContentViewLayoutImpl.class)
List<ContentViewLayout> resultLayouts;
@XNode("resultColumns")
String resultColumns;
/**
* @since 6.0
*/
@XNode("resultLayout")
String resultLayout;
@XNodeList(value = "flags/flag", type = ArrayList.class, componentType = String.class)
List<String> flags;
@XNode("cacheKey")
String cacheKey;
@XNode("cacheSize")
Integer cacheSize;
@XNode("useGlobalPageSize")
Boolean useGlobalPageSize;
@XNode("showTitle")
Boolean showTitle;
@XNode("showPageSizeSelector")
Boolean showPageSizeSelector;
@XNode("showRefreshCommand")
Boolean showRefreshCommand;
@XNode("showFilterForm")
Boolean showFilterForm;
@XNodeList(value = "refresh/event", type = ArrayList.class, componentType = String.class)
List<String> refreshEventNames;
@XNodeList(value = "reset/event", type = ArrayList.class, componentType = String.class)
List<String> resetEventNames;
public String getName() {
return name;
}
public CoreQueryPageProviderDescriptor getCoreQueryPageProvider() {
return coreQueryPageProvider;
}
public GenericPageProviderDescriptor getGenericPageProvider() {
return genericPageProvider;
}
public ReferencePageProviderDescriptor getReferencePageProvider() {
return referencePageProvider;
}
// @since 6.0
protected String pageProviderName;
// @since 6.0
protected Map<String, String> pageProviderProperties;
public String getSelectionListName() {
return selectionList;
}
public String getPagination() {
return pagination;
}
public List<String> getActionCategories() {
return actionCategories;
}
public ContentViewLayoutImpl getSearchLayout() {
return searchLayout;
}
public Boolean getAppendResultLayouts() {
return appendResultLayouts;
}
public List<ContentViewLayout> getResultLayouts() {
return resultLayouts;
}
public String getCacheKey() {
return cacheKey;
}
public Integer getCacheSize() {
return cacheSize;
}
public List<String> getRefreshEventNames() {
return refreshEventNames;
}
public List<String> getResetEventNames() {
return resetEventNames;
}
public Boolean getUseGlobalPageSize() {
return useGlobalPageSize;
}
public String getIconPath() {
return iconPath;
}
public String getTitle() {
return title;
}
public Boolean getTranslateTitle() {
return translateTitle;
}
public String getSearchDocumentBinding() {
return searchDocument;
}
public String getResultColumnsBinding() {
return resultColumns;
}
/**
* @since 6.0
*/
public String getResultLayoutBinding() {
return resultLayout;
}
public List<String> getFlags() {
return flags;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* @since 5.4.2
*/
public Boolean getShowTitle() {
return showTitle;
}
/**
* @since 5.4.2
*/
public Boolean getShowPageSizeSelector() {
if (showPageSizeSelector == null) {
// default value
return Boolean.TRUE;
}
return showPageSizeSelector;
}
/**
* @since 5.4.2
*/
public Boolean getShowRefreshCommand() {
if (showRefreshCommand == null) {
// default value
return Boolean.TRUE;
}
return showRefreshCommand;
}
/**
* @since 5.4.2
*/
public Boolean getShowFilterForm() {
return showFilterForm;
}
/**
* @since 5.4.2
*/
public String getEmptySentence() {
return emptySentence;
}
/**
* @since 5.4.2
*/
public Boolean getTranslateEmptySentence() {
return translateEmptySentence;
}
/**
* @since 6.0
*/
public String getPageProviderName() {
if (pageProviderName == null) {
if (referencePageProvider != null
&& referencePageProvider.isEnabled()) {
pageProviderName = referencePageProvider.getName();
} else if (coreQueryPageProvider != null
&& coreQueryPageProvider.isEnabled()
&& coreQueryPageProvider.getName() != null) {
pageProviderName = coreQueryPageProvider.getName();
} else if (genericPageProvider != null
&& genericPageProvider.isEnabled()
&& genericPageProvider.getName() != null) {
pageProviderName = genericPageProvider.getName();
} else {
pageProviderName = getName();
}
}
return pageProviderName;
}
/**
* @since 6.0
*/
public Map<String, String> getPageProviderProperties() {
if (pageProviderProperties == null) {
if (referencePageProvider != null
&& referencePageProvider.isEnabled()) {
pageProviderProperties = referencePageProvider.getProperties();
} else if (coreQueryPageProvider != null
&& coreQueryPageProvider.isEnabled()) {
pageProviderProperties = coreQueryPageProvider.getProperties();
} else if (genericPageProvider != null
&& genericPageProvider.isEnabled()) {
pageProviderProperties = genericPageProvider.getProperties();
}
}
return pageProviderProperties;
}
public ContentViewDescriptor clone() {
ContentViewDescriptor clone = new ContentViewDescriptor();
clone.name = getName();
clone.enabled = isEnabled();
clone.title = getTitle();
clone.translateTitle = getTranslateTitle();
clone.emptySentence = getEmptySentence();
clone.translateEmptySentence = getTranslateEmptySentence();
clone.iconPath = getIconPath();
CoreQueryPageProviderDescriptor cpp = getCoreQueryPageProvider();
if (cpp != null) {
clone.coreQueryPageProvider = cpp.clone();
}
GenericPageProviderDescriptor gpp = getGenericPageProvider();
if (gpp != null) {
clone.genericPageProvider = gpp.clone();
}
ReferencePageProviderDescriptor rpp = getReferencePageProvider();
if (rpp != null) {
clone.referencePageProvider = rpp.clone();
}
clone.selectionList = getSelectionListName();
clone.pagination = getPagination();
List<String> actionCats = getActionCategories();
if (actionCats != null) {
clone.actionCategories = new ArrayList<String>();
clone.actionCategories.addAll(actionCats);
}
clone.searchDocument = getSearchDocumentBinding();
ContentViewLayoutImpl searchLayout = getSearchLayout();
if (searchLayout != null) {
clone.searchLayout = searchLayout.clone();
}
clone.appendResultLayouts = getAppendResultLayouts();
List<ContentViewLayout> resultLayouts = getResultLayouts();
if (resultLayouts != null) {
clone.resultLayouts = new ArrayList<ContentViewLayout>();
for (ContentViewLayout item : resultLayouts) {
clone.resultLayouts.add(item.clone());
}
}
clone.resultColumns = getResultColumnsBinding();
clone.resultLayout = getResultLayoutBinding();
List<String> flags = getFlags();
if (flags != null) {
clone.flags = new ArrayList<String>();
clone.flags.addAll(flags);
}
clone.cacheKey = getCacheKey();
clone.cacheSize = getCacheSize();
clone.useGlobalPageSize = getUseGlobalPageSize();
clone.showTitle = getShowTitle();
clone.showPageSizeSelector = getShowPageSizeSelector();
clone.showRefreshCommand = getShowRefreshCommand();
clone.showFilterForm = getShowFilterForm();
List<String> refresh = getRefreshEventNames();
if (refresh != null) {
clone.refreshEventNames = new ArrayList<String>();
clone.refreshEventNames.addAll(refresh);
}
List<String> reset = getResetEventNames();
if (reset != null) {
clone.resetEventNames = new ArrayList<String>();
clone.resetEventNames.addAll(reset);
}
return clone;
}
}