/*
* (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* 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;
/**
* @since 7.4
*/
@XNode("waitForExecutionSentence")
String waitForExecutionSentence;
@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;
/**
* @since 7.4
*/
@XNode("waitForExecution")
Boolean waitForExecution;
@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 7.4
*/
public String getWaitForExecutionSentence() {
return waitForExecutionSentence;
}
/**
* @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;
}
/**
* @since 7.4
*/
public Boolean getWaitForExecution() {
return waitForExecution;
}
/**
* @since 7.4
*/
public void merge(ContentViewDescriptor newDesc) {
this.setEnabled(newDesc.isEnabled());
String title = newDesc.getTitle();
if (title != null) {
this.title = title;
}
Boolean translateTitle = newDesc.getTranslateTitle();
if (translateTitle != null) {
this.translateTitle = translateTitle;
}
String emptySentence = newDesc.getEmptySentence();
if (emptySentence != null) {
this.emptySentence = emptySentence;
}
String waitForExecutionSentence = newDesc.getWaitForExecutionSentence();
if (waitForExecutionSentence != null) {
this.waitForExecutionSentence = waitForExecutionSentence;
}
Boolean translateEmptySentence = newDesc.getTranslateEmptySentence();
if (translateEmptySentence != null) {
this.translateEmptySentence = translateEmptySentence;
}
String iconPath = newDesc.getIconPath();
if (iconPath != null) {
this.iconPath = iconPath;
}
List<String> actions = newDesc.getActionCategories();
if (actions != null && !actions.isEmpty()) {
this.actionCategories = actions;
}
String cacheKey = newDesc.getCacheKey();
if (cacheKey != null) {
this.cacheKey = cacheKey;
}
Integer cacheSize = newDesc.getCacheSize();
if (cacheSize != null) {
this.cacheSize = cacheSize;
}
CoreQueryPageProviderDescriptor coreDesc = newDesc.getCoreQueryPageProvider();
if (coreDesc != null && coreDesc.isEnabled()) {
this.coreQueryPageProvider = coreDesc;
// make sure other page providers are reset
this.genericPageProvider = null;
this.referencePageProvider = null;
}
GenericPageProviderDescriptor genDesc = newDesc.getGenericPageProvider();
if (genDesc != null && genDesc.isEnabled()) {
this.genericPageProvider = genDesc;
// make sure other page providers are reset
this.coreQueryPageProvider = null;
this.referencePageProvider = null;
}
ReferencePageProviderDescriptor refDesc = newDesc.getReferencePageProvider();
if (refDesc != null && refDesc.isEnabled()) {
this.referencePageProvider = refDesc;
// make sure other page providers are reset
this.coreQueryPageProvider = null;
this.genericPageProvider = null;
}
String pagination = newDesc.getPagination();
if (pagination != null) {
this.pagination = pagination;
}
List<String> events = newDesc.getRefreshEventNames();
if (events != null && !events.isEmpty()) {
this.refreshEventNames = events;
}
events = newDesc.getResetEventNames();
if (events != null && !events.isEmpty()) {
this.resetEventNames = events;
}
ContentViewLayoutImpl searchLayout = newDesc.getSearchLayout();
if (searchLayout != null) {
this.searchLayout = searchLayout;
}
List<ContentViewLayout> resultLayouts = newDesc.getResultLayouts();
if (resultLayouts != null) {
Boolean appendResultLayout = newDesc.getAppendResultLayouts();
if (Boolean.TRUE.equals(appendResultLayout) || resultLayouts.isEmpty()) {
List<ContentViewLayout> allLayouts = new ArrayList<ContentViewLayout>();
if (this.resultLayouts != null) {
allLayouts.addAll(this.resultLayouts);
}
allLayouts.addAll(resultLayouts);
this.resultLayouts = allLayouts;
} else {
this.resultLayouts = resultLayouts;
}
}
List<String> flags = newDesc.getFlags();
if (flags != null && !flags.isEmpty()) {
this.flags = flags;
}
String selectionList = newDesc.getSelectionListName();
if (selectionList != null) {
this.selectionList = selectionList;
}
Boolean useGlobalPageSize = newDesc.getUseGlobalPageSize();
if (useGlobalPageSize != null) {
this.useGlobalPageSize = useGlobalPageSize;
}
Boolean showTitle = newDesc.getShowTitle();
if (showTitle != null) {
this.showTitle = showTitle;
}
// avoid override when setting the default value => use the field, not
// the API, for merge
Boolean showPageSizeSelector = newDesc.showPageSizeSelector;
if (showPageSizeSelector != null) {
this.showPageSizeSelector = showPageSizeSelector;
}
Boolean showRefreshCommand = newDesc.showRefreshCommand;
if (showRefreshCommand != null) {
this.showRefreshCommand = showRefreshCommand;
}
Boolean showFilterForm = newDesc.getShowFilterForm();
if (showFilterForm != null) {
this.showFilterForm = showFilterForm;
}
String searchDocument = newDesc.getSearchDocumentBinding();
if (searchDocument != null) {
this.searchDocument = searchDocument;
}
String resultCols = newDesc.getResultColumnsBinding();
if (resultCols != null) {
this.resultColumns = resultCols;
}
String resultLayout = newDesc.getResultLayoutBinding();
if (resultLayout != null) {
this.resultLayout = resultLayout;
}
Boolean waitForFilter = newDesc.getWaitForExecution();
if (waitForFilter != null) {
this.waitForExecution = waitForFilter;
}
}
@Override
public ContentViewDescriptor clone() {
ContentViewDescriptor clone = new ContentViewDescriptor();
clone.name = getName();
clone.enabled = isEnabled();
clone.title = getTitle();
clone.translateTitle = getTranslateTitle();
clone.emptySentence = getEmptySentence();
clone.waitForExecutionSentence = getWaitForExecutionSentence();
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);
}
clone.waitForExecution = getWaitForExecution();
return clone;
}
}