/*
* Copyright (C) 2003-2007 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.fastcontentcreator;
import org.exoplatform.ecm.resolver.JCRResourceResolver;
import org.exoplatform.ecm.webui.form.UIDialogForm;
import org.exoplatform.ecm.webui.selector.ComponentSelector;
import org.exoplatform.ecm.webui.selector.UISelectable;
import org.exoplatform.ecm.webui.tree.selectone.UIOneNodePathSelector;
import org.exoplatform.ecm.webui.tree.selectone.UIOneTaxonomySelector;
import org.exoplatform.ecm.webui.utils.DialogFormUtil;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.resolver.ResourceResolver;
import org.exoplatform.services.cms.BasePath;
import org.exoplatform.services.cms.CmsService;
import org.exoplatform.services.cms.impl.DMSConfiguration;
import org.exoplatform.services.cms.taxonomy.TaxonomyService;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.upload.UploadService;
import org.exoplatform.wcm.webui.Utils;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.web.application.RequireJS;
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.ComponentConfigs;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormInput;
import org.exoplatform.webui.form.UIFormInputBase;
import org.exoplatform.webui.form.UIFormMultiValueInputSet;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.input.UIUploadInput;
import javax.jcr.AccessDeniedException;
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.lock.LockException;
import javax.jcr.version.VersionException;
import javax.portlet.PortletPreferences;
import java.security.AccessControlException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
* Jun 25, 2009
*/
@ComponentConfigs( {
@ComponentConfig(type = UIFormMultiValueInputSet.class, id = "WYSIWYGRichTextMultipleInputset", events = {
@EventConfig(listeners = UIDialogForm.AddActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIFormMultiValueInputSet.RemoveActionListener.class, phase = Phase.DECODE) }),
@ComponentConfig(lifecycle = UIFormLifecycle.class, events = {
@EventConfig(listeners = UIFCCForm.SaveActionListener.class),
@EventConfig(listeners = UIFCCForm.AddActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIFCCForm.RemoveActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIFCCForm.ShowComponentActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIFCCForm.RemoveReferenceActionListener.class,
confirm = "DialogFormField.msg.confirm-delete",
phase = Phase.DECODE) }) })
public class UIFCCForm extends UIDialogForm implements UISelectable {
/** The Constant FIELD_TAXONOMY. */
final static public String FIELD_TAXONOMY = "categories";
/** The Constant POPUP_TAXONOMY. */
final static public String POPUP_TAXONOMY = "UIPopupTaxonomy";
/** The list taxonomy. */
private List<String> listTaxonomy = new ArrayList<String>();
/** The list taxonomy name. */
private List<String> listTaxonomyName = new ArrayList<String>();
/** The document type_. */
private String documentType_ ;
/** The jcr template resource resolver_. */
private JCRResourceResolver jcrTemplateResourceResolver_ ;
/**
* Instantiates a new uIFCC form.
*
* @throws Exception the exception
*/
public UIFCCForm() throws Exception {
PortletPreferences preferences = UIFCCUtils.getPortletPreferences() ;
String custom_save_button = preferences.getValue(UIFCCConstant.PREFERENCE_SAVE_BUTTON, "");
setActions(new String[]{custom_save_button}) ;
}
public String event(String name) throws Exception
{
StringBuilder b = new StringBuilder();
b.append("javascript:eXo.webui.UIForm.submitForm('").append(getFormId()).append("','");
b.append("Save").append("',true)");
return b.toString();
}
private String getFormId()
{
WebuiRequestContext context = WebuiRequestContext.getCurrentInstance();
if (context instanceof PortletRequestContext)
{
return ((PortletRequestContext)context).getWindowId() + "#" + getId();
}
return getId();
}
/**
* Gets the list taxonomy.
*
* @return the list taxonomy
*/
public List<String> getListTaxonomy() {
return listTaxonomy;
}
/**
* Gets the list taxonomy name.
*
* @return the list taxonomy name
*/
public List<String> getlistTaxonomyName() {
return listTaxonomyName;
}
/**
* Sets the list taxonomy.
*
* @param listTaxonomyNew the new list taxonomy
*/
public void setListTaxonomy(List<String> listTaxonomyNew) {
listTaxonomy = listTaxonomyNew;
}
/**
* Sets the list taxonomy name.
*
* @param listTaxonomyNameNew the new list taxonomy name
*/
public void setListTaxonomyName(List<String> listTaxonomyNameNew) {
listTaxonomyName = listTaxonomyNameNew;
}
/* (non-Javadoc)
* @see org.exoplatform.ecm.webui.form.UIDialogForm#getTemplate()
*/
public String getTemplate() {
TemplateService templateService = getApplicationComponent(TemplateService.class) ;
String userName = Util.getPortalRequestContext().getRemoteUser() ;
try {
if(userName == null) {
return templateService.getTemplatePathByAnonymous(true, documentType_);
}
return templateService.getTemplatePathByUser(true, documentType_, userName) ;
} catch (Exception e) {
UIApplication uiApp = getAncestorOfType(UIApplication.class) ;
Object[] arg = { documentType_ } ;
uiApp.addMessage(new ApplicationMessage("UIFCCForm.msg.not-support", arg, ApplicationMessage.ERROR)) ;
return null ;
}
}
/* (non-Javadoc)
* @see org.exoplatform.ecm.webui.selector.UISelectable#doSelect(java.lang.String, java.lang.Object)
*/
@SuppressWarnings("unchecked")
public void doSelect(String selectField, Object value) throws Exception {
this.isUpdateSelect = true;
UIFormInput formInput = getUIInput(selectField);
if(formInput instanceof UIFormInputBase) {
((UIFormInputBase)formInput).setValue(value.toString());
}else if(formInput instanceof UIFormMultiValueInputSet) {
UIFormMultiValueInputSet inputSet = (UIFormMultiValueInputSet) formInput;
String valueTaxonomy = String.valueOf(value).trim();
List taxonomylist = inputSet.getValue();
if (!taxonomylist.contains(valueTaxonomy)) {
listTaxonomy.add(valueTaxonomy);
listTaxonomyName.add(valueTaxonomy);
taxonomylist.add(valueTaxonomy);
}
inputSet.setValue(taxonomylist);
}
UIFCCPortlet uiContainer = getParent();
uiContainer.removeChildById("PopupComponent");
}
/**
* Gets the current node.
*
* @return the current node
*
* @throws Exception the exception
*/
public Node getCurrentNode() throws Exception {
RepositoryService repositoryService = getApplicationComponent(RepositoryService.class) ;
PortletPreferences preferences = UIFCCUtils.getPortletPreferences() ;
Session session = WCMCoreUtils.getUserSessionProvider()
.getSession(preferences.getValue(UIFCCConstant.PREFERENCE_WORKSPACE,
""),
repositoryService.getCurrentRepository());
return (Node) session.getItem(preferences.getValue("path", ""));
}
/**
* Sets the template node.
*
* @param type the new template node
*/
public void setTemplateNode(String type) { documentType_ = type ; }
/* (non-Javadoc)
* @see org.exoplatform.ecm.webui.form.UIDialogForm#isEditing()
*/
public boolean isEditing() { return false ; }
/*
* (non-Javadoc)
* @see
* org.exoplatform.webui.core.UIComponent#getTemplateResourceResolver(org.
* exoplatform.webui.application.WebuiRequestContext, java.lang.String)
*/
public ResourceResolver getTemplateResourceResolver(WebuiRequestContext context, String template) {
if(jcrTemplateResourceResolver_ == null) newJCRTemplateResourceResolver() ;
return jcrTemplateResourceResolver_;
}
/**
* New jcr template resource resolver.
*/
public void newJCRTemplateResourceResolver() {
try {
jcrTemplateResourceResolver_ = new JCRResourceResolver(getDMSWorkspace()) ;
} catch(Exception e) {
Utils.createPopupMessage(this, "UIFCCForm.msg.new-jcr-template", null, ApplicationMessage.ERROR);
}
}
/**
* Gets the dMS workspace.
*
* @return the dMS workspace
*/
private String getDMSWorkspace() {
DMSConfiguration dmsConfiguration = getApplicationComponent(DMSConfiguration.class);
return dmsConfiguration.getConfig().getSystemWorkspace();
}
@Override
public void processRender(WebuiRequestContext context) throws Exception {
context.getJavascriptManager().loadScriptResource("wcm-webui-ext");
context.getJavascriptManager().addCustomizedOnLoadScript("changeWarning();");
super.processRender(context);
}
/**
* 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.
*/
static public class SaveActionListener extends EventListener<UIFCCForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIFCCForm> event) throws Exception {
UIFCCForm fastContentCreatorForm = event.getSource() ;
UIApplication uiApp = fastContentCreatorForm.getAncestorOfType(UIApplication.class);
PortletPreferences preferences = UIFCCUtils.getPortletPreferences();
String preferencePath = preferences.getValue(UIFCCConstant.PREFERENCE_PATH, "") ;
String preferenceType = preferences.getValue(UIFCCConstant.PREFERENCE_TYPE, "") ;
String preferenceWorkspace = preferences.getValue(UIFCCConstant.PREFERENCE_WORKSPACE, "") ;
RepositoryService repositoryService = fastContentCreatorForm.getApplicationComponent(RepositoryService.class);
SessionProvider sessionProvider = WCMCoreUtils.getUserSessionProvider();
Session session = sessionProvider.getSession(preferenceWorkspace, repositoryService.getCurrentRepository());
CmsService cmsService = fastContentCreatorForm.getApplicationComponent(CmsService.class) ;
TaxonomyService taxonomyService = fastContentCreatorForm.getApplicationComponent(TaxonomyService.class);
boolean hasCategories = false;
StringBuffer sb = new StringBuffer();
String categoriesPath = "";
String[] categoriesPathList = null;
List inputs = fastContentCreatorForm.getChildren();
for (int i = 0; i < inputs.size(); i++) {
UIFormInput input = (UIFormInput) inputs.get(i);
if((input.getName() != null) && input.getName().equals("name")) {
String valueName = input.getValue().toString().trim();
if (!org.exoplatform.ecm.webui.utils.Utils.isNameValid(valueName,
org.exoplatform.ecm.webui.utils.Utils.SPECIALCHARACTER)) {
uiApp.addMessage(new ApplicationMessage("UIFCCForm.msg.name-not-allowed", null, ApplicationMessage.WARNING));
return;
}
}
}
if(fastContentCreatorForm.isReference) {
UIFormMultiValueInputSet uiSet = fastContentCreatorForm.getChild(UIFormMultiValueInputSet.class);
if((uiSet != null) && (uiSet.getName() != null) && uiSet.getName().equals("categories")) {
hasCategories = true;
List<UIComponent> listChildren = uiSet.getChildren();
for (UIComponent component : listChildren) {
UIFormStringInput uiStringInput = (UIFormStringInput)component;
if(uiStringInput.getValue() != null) {
String value = uiStringInput.getValue().trim();
sb.append(value).append(",");
}
}
categoriesPath = sb.toString();
if (categoriesPath.endsWith(",")) categoriesPath = categoriesPath.substring(0, categoriesPath.length()-1).trim();
categoriesPathList = categoriesPath.split(",");
if ((categoriesPathList == null) || (categoriesPathList.length == 0)) {
uiApp.addMessage(new ApplicationMessage("UISelectedCategoriesGrid.msg.non-categories", null,
ApplicationMessage.WARNING));
return;
}
for(String categoryPath : categoriesPathList) {
if((categoryPath != null) && (categoryPath.trim().length() > 0)){
if (categoryPath.indexOf("/") == -1) {
uiApp.addMessage(new ApplicationMessage("UISelectedCategoriesGrid.msg.non-categories", null,
ApplicationMessage.WARNING));
return;
}
}
}
}
}
Map inputProperties = DialogFormUtil.prepareMap(fastContentCreatorForm.getChildren(),
fastContentCreatorForm.getInputProperties(),
fastContentCreatorForm.getInputOptions());
Node homeNode = null;
Node newNode = null ;
try {
homeNode = (Node) session.getItem(preferencePath);
} catch (AccessDeniedException ade){
Object[] args = { preferencePath } ;
uiApp.addMessage(new ApplicationMessage("UIFCCForm.msg.access-denied", args,
ApplicationMessage.WARNING)) ;
return;
} catch(PathNotFoundException pnfe) {
Object[] args = { preferencePath } ;
uiApp.addMessage(new ApplicationMessage("UIFCCForm.msg.path-not-found", args,
ApplicationMessage.WARNING)) ;
return;
}
try {
String addedPath = cmsService.storeNode(preferenceType, homeNode, inputProperties, true);
homeNode.getSession().save() ;
int index = 0;
if(homeNode.hasNode(addedPath.substring(addedPath.lastIndexOf("/") + 1))) {
newNode = homeNode.getNode(addedPath.substring(addedPath.lastIndexOf("/") + 1));
if (hasCategories && (newNode != null) && ((categoriesPath != null) && (categoriesPath.length() > 0))){
for(String categoryPath : categoriesPathList) {
index = categoryPath.indexOf("/");
taxonomyService.addCategory(newNode, categoryPath.substring(0, index), categoryPath.substring(index + 1));
}
}
event.getRequestContext().setAttribute("nodePath", newNode.getPath());
}
fastContentCreatorForm.reset() ;
fastContentCreatorForm.setIsResetForm(true) ;
for(UIComponent uiChild : fastContentCreatorForm.getChildren()) {
if(uiChild instanceof UIFormMultiValueInputSet) {
((UIFormMultiValueInputSet)uiChild).setValue(new ArrayList<Value>()) ;
} else if(uiChild instanceof UIUploadInput) {
UploadService uploadService = fastContentCreatorForm.getApplicationComponent(UploadService.class) ;
uploadService.removeUploadResource(((UIUploadInput)uiChild).getUploadIds()[0]) ;
}
}
session.save() ;
session.refresh(false) ;
homeNode.getSession().refresh(false) ;
boolean preferenceIsRedirect = Boolean.parseBoolean(preferences.getValue(UIFCCConstant.PREFERENCE_IS_REDIRECT, "")) ;
String preferenceRedirectPath = preferences.getValue(UIFCCConstant.PREFERENCE_REDIRECT_PATH, "") ;
if (preferenceIsRedirect && preferenceRedirectPath != null) {
RequireJS requireJS = event.getRequestContext().getJavascriptManager().getRequireJS();
requireJS.require("SHARED/ecm-utils", "ecmutil").addScripts("ecmutil.ECMUtils.ajaxRedirect('" + preferenceRedirectPath
+ "');");
} else {
String saveMessage = preferences.getValue(UIFCCConstant.PREFERENCE_SAVE_MESSAGE, "") ;
if (saveMessage == null) saveMessage = "saved-successfully";
Object[] args = { saveMessage } ;
ApplicationMessage appMessage = new ApplicationMessage("UIFCCForm.msg.saved-successfully", args);
appMessage.setArgsLocalized(false);
uiApp.addMessage(appMessage) ;
}
event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorForm.getParent()) ;
} catch (AccessControlException ace) {
throw new AccessDeniedException(ace.getMessage());
} catch(VersionException ve) {
uiApp.addMessage(new ApplicationMessage("UIFCCForm.msg.in-versioning", null,
ApplicationMessage.WARNING)) ;
return;
} catch(AccessDeniedException e) {
Object[] args = { preferencePath } ;
String key = "UIFCCForm.msg.access-denied" ;
uiApp.addMessage(new ApplicationMessage(key, args, ApplicationMessage.WARNING)) ;
return;
} catch(LockException lock) {
Object[] args = { preferencePath } ;
String key = "UIFCCForm.msg.node-locked" ;
uiApp.addMessage(new ApplicationMessage(key, args, ApplicationMessage.WARNING)) ;
return;
} catch(ItemExistsException item) {
Object[] args = { preferencePath } ;
String key = "UIFCCForm.msg.node-isExist" ;
uiApp.addMessage(new ApplicationMessage(key, args, ApplicationMessage.WARNING)) ;
}
}
}
/**
* The listener interface for receiving showComponentAction events.
* The class that is interested in processing a showComponentAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addShowComponentActionListener</code> method. When
* the showComponentAction event occurs, that object's appropriate
* method is invoked.
*/
@SuppressWarnings("unchecked")
static public class ShowComponentActionListener extends EventListener<UIFCCForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIFCCForm> event) throws Exception {
UIFCCForm fastContentCreatorForm = event.getSource() ;
UIFCCPortlet fastContentCreatorPortlet = fastContentCreatorForm.getParent() ;
fastContentCreatorForm.isShowingComponent = true;
String fieldName = event.getRequestContext().getRequestParameter(OBJECTID) ;
Map fieldPropertiesMap = fastContentCreatorForm.componentSelectors.get(fieldName) ;
String classPath = (String)fieldPropertiesMap.get("selectorClass") ;
String rootPath = (String)fieldPropertiesMap.get("rootPath") ;
ClassLoader cl = Thread.currentThread().getContextClassLoader() ;
Class clazz = Class.forName(classPath, true, cl) ;
UIComponent component = fastContentCreatorPortlet.createUIComponent(clazz, null, null);
NodeHierarchyCreator nodeHierarchyCreator = fastContentCreatorForm.getApplicationComponent(NodeHierarchyCreator.class);
SessionProvider sessionProvider = WCMCoreUtils.getUserSessionProvider();
String selectorParams = (String)fieldPropertiesMap.get("selectorParams") ;
if(component instanceof UIOneNodePathSelector) {
String repositoryName = UIFCCUtils.getPreferenceRepository() ;
String wsFieldName = (String)fieldPropertiesMap.get("workspaceField") ;
String wsName = "";
if(wsFieldName != null && wsFieldName.length() > 0) {
wsName = (String)fastContentCreatorForm.<UIFormInputBase>getUIInput(wsFieldName).getValue() ;
((UIOneNodePathSelector)component).setIsDisable(wsName, true) ;
}
if(selectorParams != null) {
String[] arrParams = selectorParams.split(",") ;
if(arrParams.length == 4) {
((UIOneNodePathSelector)component).setAcceptedNodeTypesInPathPanel(new String[] {"nt:file"}) ;
wsName = arrParams[1];
rootPath = arrParams[2];
((UIOneNodePathSelector)component).setIsDisable(wsName, true) ;
if(arrParams[3].indexOf(";") > -1) {
((UIOneNodePathSelector)component).setAcceptedMimeTypes(arrParams[3].split(";")) ;
} else {
((UIOneNodePathSelector)component).setAcceptedMimeTypes(new String[] {arrParams[3]}) ;
}
}
}
if(rootPath == null) rootPath = "/";
((UIOneNodePathSelector)component).setRootNodeLocation(repositoryName, wsName, rootPath) ;
((UIOneNodePathSelector)component).setShowRootPathSelect(true);
((UIOneNodePathSelector)component).init(sessionProvider);
} else if (component instanceof UIOneTaxonomySelector) {
String workspaceName = fastContentCreatorForm.getDMSWorkspace();
((UIOneTaxonomySelector)component).setIsDisable(workspaceName, false);
String rootTreePath = nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_STORAGE_PATH);
RepositoryService repositoryService = fastContentCreatorForm.getApplicationComponent(RepositoryService.class);
Session session = sessionProvider.getSession(workspaceName,
repositoryService.getCurrentRepository());
Node rootTree = (Node) session.getItem(rootTreePath);
NodeIterator childrenIterator = rootTree.getNodes();
while (childrenIterator.hasNext()) {
Node childNode = childrenIterator.nextNode();
rootTreePath = childNode.getPath();
break;
}
((UIOneTaxonomySelector) component).setRootNodeLocation(fastContentCreatorForm.repositoryName,
workspaceName,
rootTreePath);
((UIOneTaxonomySelector)component).init(sessionProvider);
}
Utils.createPopupWindow(fastContentCreatorForm, component, UIFCCConstant.TAXONOMY_POPUP_WINDOW, 640);
String param = "returnField=" + fieldName ;
String[] params = selectorParams == null ? new String[] { param } : new String[] { param,
"selectorParams=" + selectorParams };
((ComponentSelector)component).setSourceComponent(fastContentCreatorForm, params) ;
event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorPortlet) ;
}
}
/**
* The listener interface for receiving removeReferenceAction events.
* The class that is interested in processing a removeReferenceAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addRemoveReferenceActionListener</code> method. When
* the removeReferenceAction event occurs, that object's appropriate
* method is invoked.
*/
static public class RemoveReferenceActionListener extends EventListener<UIFCCForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIFCCForm> event) throws Exception {
UIFCCForm fastContentCreatorForm = event.getSource() ;
fastContentCreatorForm.isRemovePreference = true;
String fieldName = event.getRequestContext().getRequestParameter(OBJECTID) ;
fastContentCreatorForm.getUIStringInput(fieldName).setValue(null) ;
event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorForm.getParent()) ;
}
}
/**
* The listener interface for receiving addAction events.
* The class that is interested in processing a addAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addAddActionListener</code> method. When
* the addAction event occurs, that object's appropriate
* method is invoked.
*/
static public class AddActionListener extends EventListener<UIFCCForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIFCCForm> event) throws Exception {
UIFCCForm uiFCCForm = event.getSource();
UIFCCPortlet fastContentCreatorPortlet = uiFCCForm.getParent();
String clickedField = event.getRequestContext().getRequestParameter(OBJECTID);
if (uiFCCForm.isReference) {
UIFormMultiValueInputSet uiSet = uiFCCForm.getChildById(FIELD_TAXONOMY);
if((uiSet != null) && (uiSet.getName() != null) && uiSet.getName().equals(FIELD_TAXONOMY)) {
if ((clickedField != null) && (clickedField.equals(FIELD_TAXONOMY))){
NodeHierarchyCreator nodeHierarchyCreator = uiFCCForm.getApplicationComponent(NodeHierarchyCreator.class);
if(uiSet.getValue().size() == 0) uiSet.setValue(new ArrayList<Value>());
String workspaceName = uiFCCForm.getDMSWorkspace();
UIOneTaxonomySelector uiOneTaxonomySelector = uiFCCForm.createUIComponent(UIOneTaxonomySelector.class,
null,
null);
uiOneTaxonomySelector.setIsDisable(workspaceName, false);
String rootTreePath = nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_STORAGE_PATH);
RepositoryService repositoryService = uiFCCForm.getApplicationComponent(RepositoryService.class);
SessionProvider sessionProvider = WCMCoreUtils.getUserSessionProvider();
Session session = sessionProvider.getSession(workspaceName,
repositoryService.getCurrentRepository());
Node rootTree = (Node) session.getItem(rootTreePath);
NodeIterator childrenIterator = rootTree.getNodes();
while (childrenIterator.hasNext()) {
Node childNode = childrenIterator.nextNode();
rootTreePath = childNode.getPath();
break;
}
uiOneTaxonomySelector.setRootNodeLocation(uiFCCForm.repositoryName, workspaceName, rootTreePath);
uiOneTaxonomySelector.init(WCMCoreUtils.getUserSessionProvider());
String param = "returnField=" + FIELD_TAXONOMY;
uiOneTaxonomySelector.setSourceComponent(uiFCCForm, new String[]{param});
Utils.createPopupWindow(uiFCCForm, uiOneTaxonomySelector, UIFCCConstant.TAXONOMY_POPUP_WINDOW, 640);
}
}
event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorPortlet);
} else {
event.getRequestContext().addUIComponentToUpdateByAjax(uiFCCForm.getParent());
}
}
}
/**
* The listener interface for receiving removeAction events.
* The class that is interested in processing a removeAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addRemoveActionListener</code> method. When
* the removeAction event occurs, that object's appropriate
* method is invoked.
*/
static public class RemoveActionListener extends EventListener<UIFCCForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIFCCForm> event) throws Exception {
event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource().getParent()) ;
}
}
}