/*
* Copyright (C) 2003-2008 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.wcm.webui.clv;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.portlet.PortletPreferences;
import org.exoplatform.ecm.utils.text.Text;
import org.exoplatform.ecm.webui.selector.UISelectable;
import org.exoplatform.services.cms.drives.DriveData;
import org.exoplatform.services.cms.drives.ManageDriveService;
import org.exoplatform.services.cms.views.ApplicationTemplateManagerService;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.core.NodetypeConstant;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.wcm.webui.Utils;
import org.exoplatform.wcm.webui.reader.ContentReader;
import org.exoplatform.wcm.webui.selector.content.UIContentSelector;
import org.exoplatform.wcm.webui.selector.content.folder.UIContentBrowsePanelFolder;
import org.exoplatform.wcm.webui.selector.content.folder.UIContentSelectorFolder;
import org.exoplatform.wcm.webui.selector.content.multi.UIContentBrowsePanelMulti;
import org.exoplatform.wcm.webui.selector.content.multi.UIContentSelectorMulti;
import org.exoplatform.wcm.webui.selector.page.UIPageSelector;
import org.exoplatform.wcm.webui.validator.ZeroNumberValidator;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormInputSet;
import org.exoplatform.webui.form.UIFormRadioBoxInput;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTabPane;
import org.exoplatform.webui.form.UIFormTextAreaInput;
import org.exoplatform.webui.form.ext.UIFormInputSetWithAction;
import org.exoplatform.webui.form.input.UICheckBoxInput;
import org.exoplatform.webui.form.validator.MandatoryValidator;
import org.exoplatform.webui.form.validator.PositiveNumberFormatValidator;
/*
* Created by The eXo Platform SAS Author : Anh Do Ngoc anh.do@exoplatform.com
* Oct 15, 2008
*/
/**
* The Class UICLVConfig.
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "system:/groovy/ContentListViewer/UICLVConfig.gtmpl",
events = {
@EventConfig(listeners = UICLVConfig.SaveActionListener.class),
@EventConfig(listeners = UICLVConfig.CancelActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.AddPathActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.IncreaseActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.DecreaseActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.SelectTargetPageActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.SelectTabActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UICLVConfig.ShowAdvancedBlockActionListener.class, phase = Phase.DECODE)
}
)
public class UICLVConfig extends UIFormTabPane implements UISelectable {
final static public String CONTENT_TAB = "clvContentTab" ;
final static public String DISPLAY_TAB = "clvDisplayTab" ;
final static public String ADVANCED_TAB = "clvAdvancedTab" ;
private static final Log LOG = ExoLogger.getLogger(UICLVConfig.class.getName());
/** The Constant DISPLAY_MODE_FORM_RADIO_BOX_INPUT. */
public static final String DISPLAY_MODE_FORM_RADIO_BOX_INPUT = "UICLVConfigDisplayModeFormRadioBoxInput";
/** The Constant ITEM_PATH_FORM_INPUT_SET. */
public final static String ITEM_PATH_FORM_INPUT_SET = "UICLVConfigItemPathFormInputSet";
/** The Constant ITEM_PATH_FORM_STRING_INPUT. */
public final static String ITEM_PATH_FORM_STRING_INPUT = "UICLVConfigItemPathFormStringInput";
/** The Constant ORDER_BY_FORM_SELECT_BOX. */
public static final String ORDER_BY_FORM_SELECT_BOX = "UICLVConfigOrderByFormSelectBox";
/** The Constant ORDER_BY_FORM_SELECT_BOX. */
public static final String ORDER_TYPE_FORM_SELECT_BOX = "UICLVConfigOrderTypeFormSelectBox";
/** The Constant ORDER_TYPE_FORM_RADIO_BOX_INPUT. */
public static final String ORDER_TYPE_FORM_RADIO_BOX_INPUT = "UICLVConfigOrderTypeFormRadioBoxInput";
/** The Constant HEADER_FORM_STRING_INPUT. */
public final static String HEADER_FORM_STRING_INPUT = "UICLVConfigHeaderFormStringInput";
/** The Constant SHOW_AUTOMATIC_DETECTION_CHECKBOX_INPUT. */
public static final String SHOW_AUTOMATIC_DETECTION_CHECKBOX_INPUT = "UICLVConfigShowAutomaticDetectionCheckboxInput";
/** The Constant DISPLAY_TEMPLATE_FORM_SELECT_BOX. */
public final static String DISPLAY_TEMPLATE_FORM_SELECT_BOX = "UICLVConfigDisplayTemplateFormSelectBox";
/** The Constant PAGINATOR_TEMPLATE_FORM_SELECT_BOX. */
public final static String PAGINATOR_TEMPLATE_FORM_SELECT_BOX = "UICLVConfigPaginatorTemplateFormSelectBox";
/** The Constant ITEMS_PER_PAGE_FORM_STRING_INPUT. */
public final static String ITEMS_PER_PAGE_FORM_STRING_INPUT = "UICLVConfigItemsPerPageFormStringInput";
/** The Constant SHOW_TITLE_FORM_CHECKBOX_INPUT. */
public static final String SHOW_TITLE_FORM_CHECKBOX_INPUT = "UICLVConfigShowTitleFormCheckboxInput";
/** The Constant SHOW_HEADER_FORM_CHECKBOX_INPUT. */
public static final String SHOW_HEADER_FORM_CHECKBOX_INPUT = "UICLVConfigShowHeaderFormCheckboxInput";
/** The Constant SHOW_REFRESH_FORM_CHECKBOX_INPUT. */
public final static String SHOW_REFRESH_FORM_CHECKBOX_INPUT = "UICLVConfigShowRefreshFormCheckboxInput";
/** The Constant SHOW_ILLUSTRATION_FORM_CHECKBOX_INPUT. */
/** The Constant SHOW_IMAGE_FORM_CHECKBOX_INPUT. */
public static final String SHOW_ILLUSTRATION_FORM_CHECKBOX_INPUT = "UICLVConfigShowIllustrationFormCheckboxInput";
// public static final String SHOW_IMAGE_FORM_CHECKBOX_INPUT =
// "UICLVConfigShowImageFormCheckboxInput";
/** The Constant SHOW_DATE_CREATED_FORM_CHECKBOX_INPUT. */
public static final String SHOW_DATE_CREATED_FORM_CHECKBOX_INPUT = "UICLVConfigShowDateCreatedFormCheckboxInput";
/** The Constant SHOW_MORE_LINK_FORM_CHECKBOX_INPUT. */
public final static String SHOW_READMORE_FORM_CHECKBOX_INPUT = "UICLVConfigShowReadmoreFormCheckboxInput";
// public static final String SHOW_MORE_LINK_FORM_CHECKBOX_INPUT =
// "UICLVConfigShowMoreLinkCheckedboxInput";
/** The Constant SHOW_SUMMARY_FORM_CHECKBOX_INPUT. */
public static final String SHOW_SUMMARY_FORM_CHECKBOX_INPUT = "UICLVConfigShowSummaryFormCheckboxInput";
/** The Constant SHOW_LINK_FORM_CHECKBOX_INPUT. */
public static final String SHOW_LINK_FORM_CHECKBOX_INPUT = "UICLVConfigShowLinkFormCheckboxInput";
/** The Constant SHOW_RSSLINK_FORM_CHECKBOX_INPUT. */
public static final String SHOW_RSSLINK_FORM_CHECKBOX_INPUT = "UICLVConfigShowRssLinkFormCheckboxInput";
/** The Constant TARGET_PAGE_FORM_INPUT_SET. */
public final static String TARGET_PAGE_FORM_INPUT_SET = "UICLVConfigTargetPageFormInputSet";
/** The Constant TARGET_PAGE_FORM_STRING_INPUT. */
public final static String TARGET_PAGE_FORM_STRING_INPUT = "UICLVConfigTargetPageFormStringInput";
/** The Constant TARGET_PAGE_SELECTOR_POPUP_WINDOW. */
public final static String TARGET_PAGE_SELECTOR_POPUP_WINDOW = "UICLVConfigTargetPageSelectorPopupWindow";
/** The Constant DYNAMIC_NAVIGATION_LABEL. */
public static final String DYNAMIC_NAVIGATION_LABEL = "UICLVConfigDynamicNavigationLabel";
/** The Constant CONTEXTUAL_FOLDER_RADIOBOX_INPUT. */
public static final String CONTEXTUAL_FOLDER_RADIOBOX_INPUT = "UICLVConfigContextualFolderRadioBoxInput";
/** The Constant SHOW_CLV_BY_STRING_INPUT. */
public static final String SHOW_CLV_BY_STRING_INPUT = "UICLVConfigShowCLVByStringInput";
/** The Constant SHOW_SCV_WITH_STRING_INPUT. */
public static final String SHOW_SCV_WITH_STRING_INPUT = "UICLVConfigshowSCVWithStringInput";
/** The Constant PAGINATOR_TEMPLATE_CATEGORY. */
public final static String PAGINATOR_TEMPLATE_CATEGORY = "paginators";
/** The Constant CACHE_ENABLE_RADIOBOX_INPUT */
public static final String CACHE_ENABLE_RADIOBOX_INPUT = "UICLVConfigCacheEnableRadioBoxInput";
/** The Constant CONTENT_BY_QUERY_TEXT_AREA */
public static final String CONTENT_BY_QUERY_TEXT_AREA = "UICLVConfigContentByQueryTextArea";
/** The Constant WORKSPACE_FORM_SELECT_BOX. */
public final static String WORKSPACE_FORM_SELECT_BOX = "UICLVConfigWorkspaceFormSelectBox";
/** The Constant CACHE_MANAGEMENT_LABEL */
public static final String CACHE_MANAGEMENT_LABEL = "UICLVConfigCacheManagementLabel";
/** The Constant CONTENT_BY_QUERY_LABEL */
public static final String CONTENT_BY_QUERY_LABEL = "UICLVContentByQueryLabel";
/** The Constant DISPLAY_TEMPLATE_CATEGORY. */
public final static String DISPLAY_TEMPLATE_CATEGORY = "navigation";
public final static String DISPLAY_TEMPLATE_LIST = "list";
public final static String TEMPLATE_STORAGE_FOLDER = "content-list-viewer";
public final static String CONTENT_LIST_TYPE = "ContentList";
public final static String CATEGORIES_CONTENT_TYPE = "CategoryContents";
public final static String CATOGORIES_NAVIGATION_TYPE = "CategoryNavigation";
/** The constant values for cache */
public static final String ENABLE_CACHE = "ENABLE";
public static final String DISABLE_CACHE = "DISABLE";
/** The popup id. */
private String popupId;
/** The items. */
private List<String> items;
private String savedPath;
private boolean isShowAdvancedBlock_;
private String appType;
private String driveName_;
public void setSavedPath(String value) {
savedPath = value;
}
public String getSavedPath () {
return savedPath;
}
/**
* check if the content in the path is alive and return only alive content
*
* @return
*/
public String getAliveSavedPath () {
//check if the path is alive
if(savedPath != null && !savedPath.isEmpty()){
List<String> tmpItems = new ArrayList<String>();
StringBuffer itemsBuffer = new StringBuffer();
if(savedPath.contains(";")){
tmpItems = Arrays.asList(savedPath.split(";"));
} else {
tmpItems.add(savedPath);
}
//only add exist Node
for(String item:tmpItems) {
try{
if(getRealNode(item) != null){
itemsBuffer.append(item).append(";");
}
}catch(RepositoryException e){
if(LOG.isDebugEnabled()){
LOG.debug(e.getMessage());
}
}
}
return itemsBuffer.toString();
}
return savedPath;
}
/**
* Gets the popup id.
*
* @return the popup id
*/
public String getPopupId() {
return popupId;
}
/**
* Sets the popup id.
*
* @param popupId the new popup id
*/
public void setPopupId(String popupId) {
this.popupId = popupId;
}
public void setDriveName(String value) { this.driveName_ = value; }
public String getDriveName() { return this.driveName_; }
/**
* Gets the items.
*
* @return the items
*/
public List<String> getItems() {
String displayMode = ((UIFormRadioBoxInput) findComponentById(UICLVConfig.DISPLAY_MODE_FORM_RADIO_BOX_INPUT)).getValue();
String itemPath = Utils.getPortletPreference(UICLVPortlet.PREFERENCE_ITEM_PATH);
if (items == null && UICLVPortlet.DISPLAY_MODE_MANUAL.equals(displayMode) && itemPath != null) {
if(itemPath.contains(";")) {
List<String> tmpItems = Arrays.asList(itemPath.split(";"));
items = new ArrayList<String>();
//only add exist Node
for(String item:tmpItems) {
try{
Node realNode=getRealNode(item);
if(realNode != null){
items.add(item);
}
}catch(RepositoryException e){
if(LOG.isDebugEnabled()){
LOG.debug(e.getMessage());
}
}
}
}
}
return items;
}
/**
* Sets the items.
*
* @param items the new items
*/
public void setItems(List<String> items) {
this.items = items;
}
public boolean isShowAdvancedBlock() { return isShowAdvancedBlock_; }
public void setIsShowAdvancedBlock(boolean value) { isShowAdvancedBlock_ = value; }
/**
* Instantiates a new uICLV config.
*
* @throws Exception the exception
*/
public UICLVConfig() throws Exception {
super("UICLVConfig");
PortletPreferences portletPreferences = ((PortletRequestContext) WebuiRequestContext.getCurrentInstance()).getRequest()
.getPreferences();
appType = portletPreferences.getValue(UICLVPortlet.PREFERENCE_APPLICATION_TYPE, null);
String displayMode = portletPreferences.getValue(UICLVPortlet.PREFERENCE_DISPLAY_MODE, null);
String itemPath = portletPreferences.getValue(UICLVPortlet.PREFERENCE_ITEM_PATH, null);
savedPath = itemPath;
itemPath = getTitles(savedPath);
this.setDriveName(portletPreferences.getValue(UICLVPortlet.PREFERENCE_ITEM_DRIVE, null));
String orderBy = portletPreferences.getValue(UICLVPortlet.PREFERENCE_ORDER_BY, null);
String orderType = portletPreferences.getValue(UICLVPortlet.PREFERENCE_ORDER_TYPE, null);
String header = portletPreferences.getValue(UICLVPortlet.PREFERENCE_HEADER, null);
String displayTemplate = portletPreferences.getValue(UICLVPortlet.PREFERENCE_DISPLAY_TEMPLATE, null);
String paginatorTemplate = portletPreferences.getValue(UICLVPortlet.PREFERENCE_PAGINATOR_TEMPLATE, null);
String itemsPerPage = portletPreferences.getValue(UICLVPortlet.PREFERENCE_ITEMS_PER_PAGE, null);
String contextualFolderMode = portletPreferences.getValue(UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER, null);
String showClvBy = portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_CLV_BY, null);
String targetPage = portletPreferences.getValue(UICLVPortlet.PREFERENCE_TARGET_PAGE, null);
String showScvWith = portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_SCV_WITH, null);
String isCacheEnabled = portletPreferences.getValue(UICLVPortlet.PREFERENCE_CACHE_ENABLED, null);
String workspace = portletPreferences.getValue(UICLVPortlet.PREFERENCE_WORKSPACE, null);
String contentByQuery = portletPreferences.getValue(UICLVPortlet.PREFERENCE_CONTENTS_BY_QUERY, null);
boolean showAutomaticDetection = Boolean.parseBoolean(portletPreferences.getValue(
UICLVPortlet.PREFERENCE_AUTOMATIC_DETECTION,null));
boolean showTitle = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_TITLE, null));
boolean showHeader = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_HEADER, null));
boolean showRefresh = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_REFRESH_BUTTON, null));
boolean showImage = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_ILLUSTRATION, null));
boolean showDateCreated = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_DATE_CREATED,
null));
boolean showReadmore = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_READMORE, null));
boolean showSummary = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_SUMMARY, null));
boolean showLink = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_LINK, null));
boolean showRssLink = Boolean.parseBoolean(portletPreferences.getValue(UICLVPortlet.PREFERENCE_SHOW_RSSLINK, null));
/** DISPLAY MODE */
List<SelectItemOption<String>> displayModeOptions = new ArrayList<SelectItemOption<String>>();
displayModeOptions.add(new SelectItemOption<String>(UICLVPortlet.DISPLAY_MODE_AUTOMATIC,
UICLVPortlet.DISPLAY_MODE_AUTOMATIC));
displayModeOptions.add(new SelectItemOption<String>(UICLVPortlet.DISPLAY_MODE_MANUAL,
UICLVPortlet.DISPLAY_MODE_MANUAL));
UIFormRadioBoxInput displayModeRadioBoxInput = new UIFormRadioBoxInput(DISPLAY_MODE_FORM_RADIO_BOX_INPUT,
DISPLAY_MODE_FORM_RADIO_BOX_INPUT,
displayModeOptions);
displayModeRadioBoxInput.setValue(displayMode);
/** ITEM PATH */
UIFormStringInput itemPathInput =
new UIFormStringInput(ITEM_PATH_FORM_STRING_INPUT, ITEM_PATH_FORM_STRING_INPUT, itemPath);
itemPathInput.setReadOnly(true);
itemPathInput.addValidator(MandatoryValidator.class);
UIFormInputSetWithAction itemPathInputSet = new UIFormInputSetWithAction(ITEM_PATH_FORM_INPUT_SET);
itemPathInputSet.setActionInfo(ITEM_PATH_FORM_STRING_INPUT, new String[] { "AddPath" }) ;
itemPathInputSet.addUIFormInput(itemPathInput);
/** ORDER BY */
List<SelectItemOption<String>> orderByOptions = new ArrayList<SelectItemOption<String>>();
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_TITLE, NodetypeConstant.EXO_TITLE));
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_DATE_CREATED, NodetypeConstant.EXO_DATE_CREATED));
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_DATE_MODIFIED,
NodetypeConstant.EXO_LAST_MODIFIED_DATE));
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_DATE_PUBLISHED,
NodetypeConstant.PUBLICATION_LIVE_DATE));
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_DATE_START_EVENT, NodetypeConstant.EXO_START_EVENT));
orderByOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_BY_INDEX, NodetypeConstant.EXO_INDEX));
UIFormSelectBox orderBySelectBox = new UIFormSelectBox(ORDER_BY_FORM_SELECT_BOX, ORDER_BY_FORM_SELECT_BOX, orderByOptions);
orderBySelectBox.setValue(orderBy);
/** ORDER TYPE */
List<SelectItemOption<String>> orderTypeOptions = new ArrayList<SelectItemOption<String>>();
orderTypeOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_TYPE_DESCENDENT, "DESC"));
orderTypeOptions.add(new SelectItemOption<String>(UICLVPortlet.ORDER_TYPE_ASCENDENT, "ASC"));
UIFormRadioBoxInput orderTypeRadioBoxInput = new UIFormRadioBoxInput(ORDER_TYPE_FORM_RADIO_BOX_INPUT,
ORDER_TYPE_FORM_RADIO_BOX_INPUT,
orderTypeOptions);
UIFormSelectBox orderTypeSelectBox = new UIFormSelectBox(ORDER_TYPE_FORM_SELECT_BOX, ORDER_TYPE_FORM_SELECT_BOX,
orderTypeOptions);
orderTypeSelectBox.setValue(orderType);
//orderTypeRadioBoxInput.setValue(orderType);
/** HEADER */
UIFormStringInput headerInput = new UIFormStringInput(HEADER_FORM_STRING_INPUT, HEADER_FORM_STRING_INPUT, header);
/** AUTOMATIC DETECTION */
UICheckBoxInput showAutomaticDetectionCheckBox = new UICheckBoxInput(SHOW_AUTOMATIC_DETECTION_CHECKBOX_INPUT,
SHOW_AUTOMATIC_DETECTION_CHECKBOX_INPUT, null);
showAutomaticDetectionCheckBox.setChecked(showAutomaticDetection);
List<SelectItemOption<String>> formViewerTemplateList = new ArrayList<SelectItemOption<String>>();
/** DISPLAY TEMPLATE */
List<SelectItemOption<String>> viewerTemplateList = new ArrayList<SelectItemOption<String>>();
if (appType.equals(CONTENT_LIST_TYPE) || appType.equals(CATEGORIES_CONTENT_TYPE)
|| appType.equals(UICLVPortlet.APPLICATION_CLV_BY_QUERY)) {
viewerTemplateList.addAll(getTemplateList(TEMPLATE_STORAGE_FOLDER, DISPLAY_TEMPLATE_LIST));
}
if (appType.equals(CONTENT_LIST_TYPE) || appType.equals(CATOGORIES_NAVIGATION_TYPE)) {
viewerTemplateList.addAll(getTemplateList(TEMPLATE_STORAGE_FOLDER,
DISPLAY_TEMPLATE_CATEGORY));
}
Collections.sort(viewerTemplateList, new TemplateNameComparator());
formViewerTemplateList.addAll(viewerTemplateList);
UIFormSelectBox formViewTemplateSelector = new UIFormSelectBox(DISPLAY_TEMPLATE_FORM_SELECT_BOX,
DISPLAY_TEMPLATE_FORM_SELECT_BOX,
formViewerTemplateList);
formViewTemplateSelector.setValue(displayTemplate);
/** PAGINATOR TEMPLATE */
List<SelectItemOption<String>> paginatorTemplateList = getTemplateList(TEMPLATE_STORAGE_FOLDER, PAGINATOR_TEMPLATE_CATEGORY);
Collections.sort(paginatorTemplateList, new TemplateNameComparator());
UIFormSelectBox paginatorTemplateSelector = new UIFormSelectBox(PAGINATOR_TEMPLATE_FORM_SELECT_BOX,
PAGINATOR_TEMPLATE_FORM_SELECT_BOX,
paginatorTemplateList);
paginatorTemplateSelector.setValue(paginatorTemplate);
/** ITEMS PER PAGE */
UIFormStringInput itemsPerPageStringInput = new UIFormStringInput(ITEMS_PER_PAGE_FORM_STRING_INPUT,
ITEMS_PER_PAGE_FORM_STRING_INPUT,
itemsPerPage);
itemsPerPageStringInput.addValidator(MandatoryValidator.class);
itemsPerPageStringInput.addValidator(ZeroNumberValidator.class);
itemsPerPageStringInput.addValidator(PositiveNumberFormatValidator.class);
itemsPerPageStringInput.setMaxLength(3);
/** SHOW TITLE */
UICheckBoxInput showTitleCheckbox = new UICheckBoxInput(SHOW_TITLE_FORM_CHECKBOX_INPUT,
SHOW_TITLE_FORM_CHECKBOX_INPUT, null);
showTitleCheckbox.setChecked(showTitle);
/** SHOW HEADER */
UICheckBoxInput showHeaderCheckBox = new UICheckBoxInput(SHOW_HEADER_FORM_CHECKBOX_INPUT,
SHOW_HEADER_FORM_CHECKBOX_INPUT, null);
showHeaderCheckBox.setChecked(showHeader);
/** SHOW REFRESH */
UICheckBoxInput showRefreshCheckbox = new UICheckBoxInput(SHOW_REFRESH_FORM_CHECKBOX_INPUT,
SHOW_REFRESH_FORM_CHECKBOX_INPUT, null);
showRefreshCheckbox.setChecked(showRefresh);
/** SHOW_IMAGE */
UICheckBoxInput showImageCheckbox = new UICheckBoxInput(SHOW_ILLUSTRATION_FORM_CHECKBOX_INPUT,
SHOW_ILLUSTRATION_FORM_CHECKBOX_INPUT, null);
showImageCheckbox.setChecked(showImage);
/** SHOW DATE CREATED */
UICheckBoxInput showDateCreatedCheckbox = new UICheckBoxInput(SHOW_DATE_CREATED_FORM_CHECKBOX_INPUT,
SHOW_DATE_CREATED_FORM_CHECKBOX_INPUT, null);
showDateCreatedCheckbox.setChecked(showDateCreated);
/** SHOW MORE LINK */
UICheckBoxInput showMoreLinkCheckbox = new UICheckBoxInput(SHOW_READMORE_FORM_CHECKBOX_INPUT,
SHOW_READMORE_FORM_CHECKBOX_INPUT, null);
showMoreLinkCheckbox.setChecked(showReadmore);
/** SHOW SUMMARY */
UICheckBoxInput showSummaryCheckbox = new UICheckBoxInput(SHOW_SUMMARY_FORM_CHECKBOX_INPUT,
SHOW_SUMMARY_FORM_CHECKBOX_INPUT, null);
showSummaryCheckbox.setChecked(showSummary);
/** SHOW LINK */
UICheckBoxInput showLinkCheckbox = new UICheckBoxInput(SHOW_LINK_FORM_CHECKBOX_INPUT,
SHOW_LINK_FORM_CHECKBOX_INPUT, null);
showLinkCheckbox.setChecked(showLink);
/** SHOW RSS LINK */
UICheckBoxInput showRssLinkCheckbox = new UICheckBoxInput(SHOW_RSSLINK_FORM_CHECKBOX_INPUT,
SHOW_RSSLINK_FORM_CHECKBOX_INPUT, null);
showRssLinkCheckbox.setChecked(showRssLink);
/** CONTEXTUAL FOLDER */
List<SelectItemOption<String>> contextualFolderOptions = new ArrayList<SelectItemOption<String>>();
contextualFolderOptions.add(new SelectItemOption<String>(UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER_ENABLE,
UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER_ENABLE));
contextualFolderOptions.add(new SelectItemOption<String>(UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER_DISABLE,
UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER_DISABLE));
UIFormRadioBoxInput contextualFolderRadioBoxInput = new UIFormRadioBoxInput(CONTEXTUAL_FOLDER_RADIOBOX_INPUT,
CONTEXTUAL_FOLDER_RADIOBOX_INPUT,
contextualFolderOptions);
contextualFolderRadioBoxInput.setValue(contextualFolderMode);
/** SHOW CLV BY */
UIFormStringInput showClvByInput = new UIFormStringInput(SHOW_CLV_BY_STRING_INPUT, SHOW_CLV_BY_STRING_INPUT, showClvBy);
/** TARGET PAGE */
UIFormInputSetWithAction targetPageInputSet = new UIFormInputSetWithAction(TARGET_PAGE_FORM_INPUT_SET);
UIFormStringInput basePathInput = new UIFormStringInput(TARGET_PAGE_FORM_STRING_INPUT,
TARGET_PAGE_FORM_STRING_INPUT,
targetPage);
basePathInput.setValue(targetPage);
basePathInput.setReadOnly(true);
targetPageInputSet.setActionInfo(TARGET_PAGE_FORM_STRING_INPUT, new String[] {"SelectTargetPage"}) ;
targetPageInputSet.addUIFormInput(basePathInput);
/** CACHE MODE */
List<SelectItemOption<String>> cacheOptions = new ArrayList<SelectItemOption<String>>();
cacheOptions.add(new SelectItemOption<String>(ENABLE_CACHE, ENABLE_CACHE));
cacheOptions.add(new SelectItemOption<String>(DISABLE_CACHE, DISABLE_CACHE));
UIFormRadioBoxInput cacheEnableRadioBoxInput = new UIFormRadioBoxInput(CACHE_ENABLE_RADIOBOX_INPUT,
CACHE_ENABLE_RADIOBOX_INPUT,
cacheOptions);
cacheEnableRadioBoxInput.setValue("true".equals(isCacheEnabled)? ENABLE_CACHE : DISABLE_CACHE);
/** WORKSPACE */
List<SelectItemOption<String>> workspaceOptions = new ArrayList<SelectItemOption<String>>();
String[] workspaceList = WCMCoreUtils.getRepository().getWorkspaceNames();
for (String wkspace : workspaceList) {
workspaceOptions.add(new SelectItemOption<String>(wkspace, wkspace));
}
UIFormSelectBox workspaceSelector = new UIFormSelectBox(WORKSPACE_FORM_SELECT_BOX,
WORKSPACE_FORM_SELECT_BOX,
workspaceOptions);
workspaceSelector.setValue(workspace);
/** CONTENT BY QUERY */
UIFormTextAreaInput queryTextAreaInput = new UIFormTextAreaInput(CONTENT_BY_QUERY_TEXT_AREA,
CONTENT_BY_QUERY_TEXT_AREA,
contentByQuery);
/** ALLOW DYNAMIC URL */
UIFormStringInput showScvWithInput = new UIFormStringInput(SHOW_SCV_WITH_STRING_INPUT,
SHOW_SCV_WITH_STRING_INPUT,
showScvWith);
if (appType.equals(CATOGORIES_NAVIGATION_TYPE)) {
//Disable option
displayModeRadioBoxInput.setDisabled(true);
showAutomaticDetectionCheckBox.setDisabled(true);
showImageCheckbox.setDisabled(true);
showSummaryCheckbox.setDisabled(true);
showDateCreatedCheckbox.setDisabled(true);
showLinkCheckbox.setDisabled(true);
showRefreshCheckbox.setDisabled(true);
showMoreLinkCheckbox.setDisabled(true);
showRssLinkCheckbox.setDisabled(true);
showScvWithInput.setDisabled(true);
}
UIFormInputSet uiCLVContentTab = new UIFormInputSet(CONTENT_TAB) ;
uiCLVContentTab.addUIFormInput(displayModeRadioBoxInput);
uiCLVContentTab.addUIFormInput((UIFormInputSet)itemPathInputSet);
uiCLVContentTab.addUIFormInput(orderBySelectBox);
uiCLVContentTab.addUIFormInput(orderTypeSelectBox);
uiCLVContentTab.addUIFormInput(orderTypeRadioBoxInput);
setSelectedTab(CONTENT_TAB);
addUIComponentInput(uiCLVContentTab) ;
UIFormInputSet uiCLVDisplayTab = new UIFormInputSet(DISPLAY_TAB) ;
uiCLVDisplayTab.addUIFormInput(headerInput);
uiCLVDisplayTab.addUIFormInput(showAutomaticDetectionCheckBox);
uiCLVDisplayTab.addUIFormInput(formViewTemplateSelector);
uiCLVDisplayTab.addUIFormInput(paginatorTemplateSelector);
uiCLVDisplayTab.addUIFormInput(itemsPerPageStringInput);
uiCLVDisplayTab.addUIFormInput(showTitleCheckbox);
uiCLVDisplayTab.addUIFormInput(showHeaderCheckBox);
uiCLVDisplayTab.addUIFormInput(showRefreshCheckbox);
uiCLVDisplayTab.addUIFormInput(showImageCheckbox);
uiCLVDisplayTab.addUIFormInput(showDateCreatedCheckbox);
uiCLVDisplayTab.addUIFormInput(showMoreLinkCheckbox);
uiCLVDisplayTab.addUIFormInput(showSummaryCheckbox);
uiCLVDisplayTab.addUIFormInput(showLinkCheckbox);
uiCLVDisplayTab.addUIFormInput(showRssLinkCheckbox);
addUIComponentInput(uiCLVDisplayTab) ;
UIFormInputSet uiCLVAdvancedTab = new UIFormInputSet(ADVANCED_TAB) ;
uiCLVAdvancedTab.addUIFormInput(contextualFolderRadioBoxInput);
uiCLVAdvancedTab.addUIFormInput(showClvByInput);
uiCLVAdvancedTab.addUIFormInput((UIFormInputSet)targetPageInputSet);
uiCLVAdvancedTab.addUIFormInput(showScvWithInput);
uiCLVAdvancedTab.addUIFormInput(cacheEnableRadioBoxInput);
if (this.isContentListByQuery()) {
uiCLVAdvancedTab.addUIFormInput(workspaceSelector);
uiCLVAdvancedTab.addUIFormInput(queryTextAreaInput);
}
addUIComponentInput(uiCLVAdvancedTab) ;
if ((contextualFolderMode != null && contextualFolderMode.equals(UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER_ENABLE))
|| this.isContentListByQuery()) {
isShowAdvancedBlock_ = true;
} else {
isShowAdvancedBlock_ = false;
}
setActions(new String[] { "Save", "Cancel" });
}
/**
* Gets the template list.
*
* @param portletName the portlet name
* @param category the category
* @return the template list
* @throws Exception the exception
*/
private List<SelectItemOption<String>> getTemplateList(String portletName, String category) throws Exception {
List<SelectItemOption<String>> templateOptionList = new ArrayList<SelectItemOption<String>>();
ApplicationTemplateManagerService templateManagerService = getApplicationComponent(ApplicationTemplateManagerService.class);
List<Node> templateNodeList = templateManagerService.getTemplatesByCategory(portletName,
category,
WCMCoreUtils.getUserSessionProvider());
for (Node templateNode : templateNodeList) {
SelectItemOption<String> template = new SelectItemOption<String>();
template.setLabel(templateNode.getName());
template.setValue(templateNode.getPath());
templateOptionList.add(template);
}
return templateOptionList;
}
public boolean isCategoriesNavigation() {
return appType.equals(CATOGORIES_NAVIGATION_TYPE);
}
/**
*
* @return True if is a CLV by Query
*/
public boolean isContentListByQuery() {
return appType.equals(UICLVPortlet.APPLICATION_CLV_BY_QUERY);
}
/* (non-Javadoc)
* @see org.exoplatform.ecm.webui.selector.UISelectable#doSelect(java.lang.String, java.lang.Object)
*/
public void doSelect(String selectField, Object value) throws Exception {
if (selectField != null && value != null) {
String sValue = (String) value;
String titles="";
String displayMode = ((UIFormRadioBoxInput) findComponentById(UICLVConfig.DISPLAY_MODE_FORM_RADIO_BOX_INPUT)).getValue();
if (ITEM_PATH_FORM_STRING_INPUT.equals(selectField) && UICLVPortlet.DISPLAY_MODE_MANUAL.equals(displayMode)) {
items = Arrays.asList(sValue.split(";"));
titles = getTitles(sValue);
savedPath = sValue;
getUIStringInput(selectField).setValue(titles);
} else if (TARGET_PAGE_FORM_STRING_INPUT.equals(selectField)){
getUIStringInput(selectField).setValue(sValue);
}else {
items = new ArrayList<String>();
String[] values = sValue.split(":");
if (values.length == 4) {
this.setDriveName(values[0]);
//check if drive is selected instead of folder
ManageDriveService managerDriveService = this.getApplicationComponent(ManageDriveService.class);
for (DriveData data : managerDriveService.getAllDrives()) {
if (data.getHomePath().equals(values[3])) {
this.setDriveName(data.getName());
}
}
sValue = sValue.substring(values[0].length() + 1);
}
titles = getTitle(sValue);
getUIStringInput(selectField).setValue(titles);
savedPath = sValue;
}
}
Utils.closePopupWindow(this, popupId);
}
private String getTitles(String itemPath) throws RepositoryException {
if (itemPath == null || itemPath.length() == 0)
return "";
StringBuffer titles = new StringBuffer();
List<String> tmpItems;
tmpItems = Arrays.asList(itemPath.split(";"));
for (String item : tmpItems) {
String title = getTitle(item);
if (title != null) {
if (titles.length() > 0) {
titles.append(";").append(title);
} else {
titles.append(title);
}
}
}
return titles.toString();
}
/**
*
* get the realnode with a path
* @param itemPath
* @return the realnode. null if the path is not ok
*/
private Node getRealNode(String itemPath) throws RepositoryException{
String strRepository, strWorkspace, strIdentifier;
int repoIndex, wsIndex;
if (itemPath==null || itemPath.length() == 0)
return null;
repoIndex = itemPath.indexOf(':');
wsIndex = itemPath.lastIndexOf(':');
strRepository = itemPath.substring(0, repoIndex);
strWorkspace = itemPath.substring(repoIndex+1, wsIndex);
strIdentifier = itemPath.substring(wsIndex +1);
Node selectedNode = Utils.getRealNode(Text.escapeIllegalJcrChars(strRepository),
Text.escapeIllegalJcrChars(strWorkspace),
Text.escapeIllegalJcrChars(strIdentifier),
false);
return selectedNode;
}
/**
*
* @param itemPath The path
* @return The title
* @throws RepositoryException
*/
private String getTitle(String itemPath) throws RepositoryException {
Node selectedNode = getRealNode(itemPath);
if (selectedNode==null) return null;
String title = null;
if (selectedNode.hasProperty("exo:title")) {
title = selectedNode.getProperty("exo:title").getValue().getString();
}
if (selectedNode.hasNode("jcr:content")) {
Node content = selectedNode.getNode("jcr:content");
if (content.hasProperty("dc:title")) {
try {
title = content.getProperty("dc:title").getValues()[0].getString();
}
catch (PathNotFoundException e) {
title = null;
}
catch (RepositoryException e) {
title = null;
}
catch (IndexOutOfBoundsException e) {
title = null;
}
}
}
if (title==null) title = selectedNode.getName();
return ContentReader.getUnescapeIllegalJcrContent(title);
}
/**
* The listener interface for receiving saveAction events.
* The class that is interested in processing a saveAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addSaveActionListener</code> method. When
* the saveAction event occurs, that object's appropriate
* method is invoked.
*/
public static class SaveActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
/** GET VALUES FROM UIFORM */
String displayMode = ((UIFormRadioBoxInput) clvConfig.findComponentById(
UICLVConfig.DISPLAY_MODE_FORM_RADIO_BOX_INPUT)).getValue();
String itemPath = clvConfig.getSavedPath();
if (itemPath == null || itemPath.length() == 0
|| (itemPath.contains(";") && displayMode.equals(UICLVPortlet.DISPLAY_MODE_AUTOMATIC))
|| (!itemPath.contains(";") && displayMode.equals(UICLVPortlet.DISPLAY_MODE_MANUAL))) {
Utils.createPopupMessage(clvConfig,
"UICLVConfig.msg.not-valid-path",
null,
ApplicationMessage.WARNING);
WebuiRequestContext requestContext = WebuiRequestContext.getCurrentInstance();
requestContext.addUIComponentToUpdateByAjax(clvConfig);
return;
}
String orderBy = clvConfig.getUIFormSelectBox(ORDER_BY_FORM_SELECT_BOX).getValue();
String orderType = clvConfig.getUIFormSelectBox(ORDER_TYPE_FORM_SELECT_BOX).getValue();
String header = clvConfig.getUIStringInput(UICLVConfig.HEADER_FORM_STRING_INPUT).getValue();
if (header == null) header = "";
String showAutomaticDetection = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_AUTOMATIC_DETECTION_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String displayTemplate = clvConfig.getUIFormSelectBox(UICLVConfig.DISPLAY_TEMPLATE_FORM_SELECT_BOX).getValue();
String paginatorTemplate = clvConfig.getUIFormSelectBox(UICLVConfig.PAGINATOR_TEMPLATE_FORM_SELECT_BOX).getValue();
String itemsPerPage = clvConfig.getUIStringInput(UICLVConfig.ITEMS_PER_PAGE_FORM_STRING_INPUT).getValue();
String showTitle = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_TITLE_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showHeader = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_HEADER_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showRefresh = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_REFRESH_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showImage = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_ILLUSTRATION_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showDateCreated = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_DATE_CREATED_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showMoreLink = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_READMORE_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showSummary = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_SUMMARY_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showLink = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_LINK_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String showRssLink = clvConfig.getUICheckBoxInput(UICLVConfig.SHOW_RSSLINK_FORM_CHECKBOX_INPUT)
.isChecked() ? "true" : "false";
String contextualFolderMode = ((UIFormRadioBoxInput) clvConfig.findComponentById(
UICLVConfig.CONTEXTUAL_FOLDER_RADIOBOX_INPUT)).getValue();
String showClvBy = clvConfig.getUIStringInput(UICLVConfig.SHOW_CLV_BY_STRING_INPUT).getValue();
if (showClvBy == null || showClvBy.length() == 0)
showClvBy = UICLVPortlet.DEFAULT_SHOW_CLV_BY;
String targetPage = clvConfig.getUIStringInput(UICLVConfig.TARGET_PAGE_FORM_STRING_INPUT).getValue();
String showScvWith = clvConfig.getUIStringInput(UICLVConfig.SHOW_SCV_WITH_STRING_INPUT).getValue();
if (showScvWith == null || showScvWith.length() == 0)
showScvWith = UICLVPortlet.DEFAULT_SHOW_SCV_WITH;
String cacheEnabled = ((UIFormRadioBoxInput) clvConfig.
findComponentById(UICLVConfig.CACHE_ENABLE_RADIOBOX_INPUT)).getValue();
/** SET VALUES TO PREFERENCES */
PortletRequestContext portletRequestContext = (PortletRequestContext) event.getRequestContext();
PortletPreferences portletPreferences = portletRequestContext.getRequest().getPreferences();
portletPreferences.setValue(UICLVPortlet.PREFERENCE_DISPLAY_MODE, displayMode);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_ITEM_PATH, itemPath);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_ITEM_DRIVE, clvConfig.getDriveName());
portletPreferences.setValue(UICLVPortlet.PREFERENCE_ORDER_BY, orderBy);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_ORDER_TYPE, orderType);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_HEADER, header);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_AUTOMATIC_DETECTION, showAutomaticDetection);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_DISPLAY_TEMPLATE, displayTemplate);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_PAGINATOR_TEMPLATE, paginatorTemplate);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_ITEMS_PER_PAGE, itemsPerPage);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_TITLE, showTitle);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_HEADER, showHeader);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_REFRESH_BUTTON, showRefresh);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_ILLUSTRATION, showImage);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_DATE_CREATED, showDateCreated);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_READMORE, showMoreLink);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_SUMMARY, showSummary);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_LINK, showLink);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_RSSLINK, showRssLink);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_CONTEXTUAL_FOLDER, contextualFolderMode);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_CLV_BY, showClvBy);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_TARGET_PAGE, targetPage);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_SHOW_SCV_WITH, showScvWith);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_CACHE_ENABLED, ENABLE_CACHE.equals(cacheEnabled)?"true":"false");
String appType = portletPreferences.getValue(UICLVPortlet.PREFERENCE_APPLICATION_TYPE, null);
if (UICLVPortlet.APPLICATION_CLV_BY_QUERY.equals(appType)) {
String workspace = ((UIFormSelectBox)clvConfig.findComponentById(UICLVConfig.WORKSPACE_FORM_SELECT_BOX)).getValue();
String query = ((UIFormTextAreaInput) clvConfig.findComponentById(UICLVConfig.CONTENT_BY_QUERY_TEXT_AREA)).getValue();
if (query == null) {
query = "";
}
portletPreferences.setValue(UICLVPortlet.PREFERENCE_WORKSPACE, workspace);
portletPreferences.setValue(UICLVPortlet.PREFERENCE_CONTENTS_BY_QUERY, query);
}
portletPreferences.store();
UICLVPortlet portlet = clvConfig.getAncestorOfType(UICLVPortlet.class);
if (Utils.isPortalEditMode()) {
portlet.updatePortlet();
} else {
if (clvConfig.getModeInternal()) {
portlet.changeToViewMode();
}else {
Utils.closePopupWindow(clvConfig, "UIViewerManagementPopupWindow");
portlet.updatePortlet();
}
}
}
}
/**
* The listener interface for receiving cancelAction events.
* The class that is interested in processing a cancelAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addCancelActionListener</code> method. When
* the cancelAction event occurs, that object's appropriate
* method is invoked.
*/
public static class CancelActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
if (!Utils.isPortalEditMode()) {
if (clvConfig.getModeInternal()) {
UICLVPortlet portlet = clvConfig.getAncestorOfType(UICLVPortlet.class);
portlet.changeToViewMode();
}else {
Utils.closePopupWindow(clvConfig, "UIViewerManagementPopupWindow");
}
}
}
}
/**
* The listener interface for receiving selectTabAction events.
* The class that is interested in processing a selectTabAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addSelectTabActionListener</code> method. When
* the selectTabAction event occurs, that object's appropriate
* method is invoked.
*/
static public class SelectTabActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
WebuiRequestContext context = event.getRequestContext();
String renderTab = context.getRequestParameter(UIComponent.OBJECTID);
if (renderTab == null) {
return;
}
event.getSource().setSelectedTab(renderTab);
event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource());
}
}
/**
* The listener interface for receiving selectFolderPathAction events.
* The class that is interested in processing a selectFolderPathAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addSelectFolderPathActionListener</code> method. When
* the selectFolderPathAction event occurs, that object's appropriate
* method is invoked.
*/
public static class AddPathActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
UIFormRadioBoxInput modeBoxInput = (UIFormRadioBoxInput) clvConfig.findComponentById(
UICLVConfig.DISPLAY_MODE_FORM_RADIO_BOX_INPUT);
String mode = modeBoxInput.getValue();
if (mode.equals(UICLVPortlet.DISPLAY_MODE_AUTOMATIC)) {
UIContentSelectorFolder contentSelector = clvConfig.createUIComponent(UIContentSelectorFolder.class, null, null);
UIContentBrowsePanelFolder folderContentSelector= contentSelector.getChild(UIContentBrowsePanelFolder.class);
String location = clvConfig.getSavedPath();
String[] locations = (location == null) ? null : location.split(":");
Node node = (locations != null && locations.length >= 3) ? Utils.getViewableNodeByComposer(locations[0],
locations[1],
locations[2])
: null;
contentSelector.init(clvConfig.getDriveName(),
fixPath(node == null ? "" : node.getPath(),
clvConfig,
(locations != null && locations.length > 0) ? locations[0] : null));
folderContentSelector.setSourceComponent(clvConfig, new String[] { UICLVConfig.ITEM_PATH_FORM_STRING_INPUT });
Utils.createPopupWindow(clvConfig, contentSelector, UIContentSelector.FOLDER_PATH_SELECTOR_POPUP_WINDOW, 800);
clvConfig.setPopupId(UIContentSelector.FOLDER_PATH_SELECTOR_POPUP_WINDOW);
} else {
UIContentSelectorMulti contentSelector = clvConfig.createUIComponent(UIContentSelectorMulti.class, null, null);
UIContentBrowsePanelMulti multiContentSelector= contentSelector.getChild(UIContentBrowsePanelMulti.class);
multiContentSelector.setSourceComponent(clvConfig, new String[] { UICLVConfig.ITEM_PATH_FORM_STRING_INPUT });
String itemPath = clvConfig.getSavedPath();
if (itemPath != null && itemPath.contains(";"))
multiContentSelector.setItemPaths(itemPath);
contentSelector.init();
Utils.createPopupWindow(clvConfig, contentSelector, UIContentSelector.CORRECT_CONTENT_SELECTOR_POPUP_WINDOW, 800);
clvConfig.setPopupId(UIContentSelector.CORRECT_CONTENT_SELECTOR_POPUP_WINDOW);
}
}
private String fixPath(String path, UICLVConfig clvConfig, String repository) throws Exception {
if (path == null || path.length() == 0 || repository == null || repository.length() == 0 ||
clvConfig.getDriveName() == null || clvConfig.getDriveName().length() == 0)
return "";
ManageDriveService managerDriveService = clvConfig.getApplicationComponent(ManageDriveService.class);
DriveData driveData = managerDriveService.getDriveByName(clvConfig.getDriveName());
if (!path.startsWith(driveData.getHomePath()))
return "";
if ("/".equals(driveData.getHomePath()))
return path;
return path.substring(driveData.getHomePath().length());
}
}
/**
* The listener interface for receiving increaseAction events.
* The class that is interested in processing a increaseAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addIncreaseActionListener</code> method. When
* the increaseAction event occurs, that object's appropriate
* method is invoked.
*/
public static class IncreaseActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
List<String> items = clvConfig.items;
int offset = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
if (offset > 0) {
String temp = items.get(offset - 1);
items.set(offset - 1, items.get(offset));
items.set(offset, temp);
}
StringBuffer sb = new StringBuffer("");
for (String item : items) {
sb.append(item).append(";");
}
String itemPath = sb.toString();
clvConfig.getUIStringInput(UICLVConfig.ITEM_PATH_FORM_STRING_INPUT).setValue(clvConfig.getTitles(itemPath));
clvConfig.setSavedPath(itemPath);
}
}
/**
* The listener interface for receiving decreaseAction events.
* The class that is interested in processing a decreaseAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addDecreaseActionListener</code> method. When
* the decreaseAction event occurs, that object's appropriate
* method is invoked.
*/
public static class DecreaseActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
List<String> items = clvConfig.items;
int offset = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
if (offset < items.size() - 1) {
String temp = items.get(offset + 1);
items.set(offset + 1, items.get(offset));
items.set(offset, temp);
}
StringBuffer sb = new StringBuffer("");
for (String item : items) {
sb.append(item).append(";");
}
String itemPath = sb.toString();
clvConfig.getUIStringInput(UICLVConfig.ITEM_PATH_FORM_STRING_INPUT).setValue(clvConfig.getTitles(itemPath));
clvConfig.setSavedPath(itemPath);
}
}
/**
* The listener interface for receiving selectTargetPageAction events.
* The class that is interested in processing a selectTargetPageAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addSelectTargetPageActionListener</code> method. When
* the selectTargetPageAction event occurs, that object's appropriate
* method is invoked.
*/
public static class SelectTargetPageActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig viewerManagementForm = event.getSource();
UIPageSelector pageSelector = viewerManagementForm.createUIComponent(UIPageSelector.class, null, null);
pageSelector.setSourceComponent(viewerManagementForm, new String[] {TARGET_PAGE_FORM_STRING_INPUT});
Utils.createPopupWindow(viewerManagementForm, pageSelector, TARGET_PAGE_SELECTOR_POPUP_WINDOW, 800);
viewerManagementForm.setPopupId(TARGET_PAGE_SELECTOR_POPUP_WINDOW);
}
}
public static class ShowAdvancedBlockActionListener extends EventListener<UICLVConfig> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UICLVConfig> event) throws Exception {
UICLVConfig clvConfig = event.getSource();
String showValue = event.getRequestContext().getRequestParameter(OBJECTID);
clvConfig.isShowAdvancedBlock_ = "true".equalsIgnoreCase(showValue);
event.getRequestContext().addUIComponentToUpdateByAjax(clvConfig);
}
}
private boolean modeInternal = false;
public void setModeInternal(boolean value) {
this.modeInternal = value;
}
public boolean getModeInternal() {
return this.modeInternal;
}
private class TemplateNameComparator implements Comparator<SelectItemOption<String>> {
public int compare(SelectItemOption<String> item1,SelectItemOption<String> item2) {
String s1 = item1.getLabel().toLowerCase();
String s2 = item2.getLabel().toLowerCase();
return s1.compareTo(s2);
}
}
}