UIContentDialogForm.java
/*
* 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.dialog;
import java.security.AccessControlException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jcr.AccessDeniedException;
import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.lock.LockException;
import javax.jcr.version.VersionException;
import javax.portlet.PortletMode;
import org.exoplatform.ecm.resolver.JCRResourceResolver;
import org.exoplatform.ecm.webui.form.UIDialogForm;
import org.exoplatform.ecm.webui.selector.UISelectable;
import org.exoplatform.ecm.webui.tree.selectone.UIOneTaxonomySelector;
import org.exoplatform.ecm.webui.utils.DialogFormUtil;
import org.exoplatform.webui.form.UIFormMultiValueInputSet;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.portal.webui.workspace.UIPortalApplication;
import org.exoplatform.resolver.ResourceResolver;
import org.exoplatform.services.cms.BasePath;
import org.exoplatform.services.cms.CmsService;
import org.exoplatform.services.cms.JcrInputProperty;
import org.exoplatform.services.cms.impl.DMSConfiguration;
import org.exoplatform.services.cms.impl.DMSRepositoryConfiguration;
import org.exoplatform.services.cms.link.LinkManager;
import org.exoplatform.services.cms.taxonomy.TaxonomyService;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.ecm.publication.PublicationPlugin;
import org.exoplatform.services.ecm.publication.PublicationService;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.core.NodeLocation;
import org.exoplatform.services.wcm.publication.PublicationDefaultStates;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.wcm.webui.Utils;
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.UIApplication;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIPopupComponent;
import org.exoplatform.webui.core.UIPopupContainer;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIFormInput;
import org.exoplatform.webui.form.UIFormInputBase;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.ecm.webui.form.DialogFormActionListeners;
/**
* Created by The eXo Platform SAS
* Author : Phan Le Thanh Chuong
* chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com
* Oct 29, 2009
*/
@ComponentConfig (
lifecycle = UIFormLifecycle.class,
events = {
@EventConfig(listeners = UIContentDialogForm.AddActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UIContentDialogForm.RemoveReferenceActionListener.class,
confirm = "DialogFormField.msg.confirm-delete", phase = Phase.DECODE),
@EventConfig(listeners = UIContentDialogForm.SaveDraftActionListener.class),
@EventConfig(listeners = UIContentDialogForm.FastPublishActionListener.class),
@EventConfig(listeners = UIContentDialogForm.PreferencesActionListener.class),
@EventConfig(listeners = UIContentDialogForm.CloseActionListener.class),
@EventConfig(listeners = DialogFormActionListeners.RemoveDataActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = DialogFormActionListeners.ChangeTabActionListener.class, phase = Phase.DECODE)
}
)
public class UIContentDialogForm extends UIDialogForm implements UIPopupComponent, UISelectable {
/** The Constant CONTENT_DIALOG_FORM_POPUP_WINDOW. */
public static final String CONTENT_DIALOG_FORM_POPUP_WINDOW = "UIContentDialogFormPopupWindow";
/** The Constant FIELD_TAXONOMY. */
public static final String FIELD_TAXONOMY = "categories";
/** The Constant TAXONOMY_CONTENT_POPUP_WINDOW. */
public static final String TAXONOMY_CONTENT_POPUP_WINDOW = "UIContentPopupWindow";
/** The Log **/
private static final Log LOG = ExoLogger.getLogger(UIContentDialogForm.class.getName());
/** The webcontent node location. */
private NodeLocation webcontentNodeLocation;
/** The list taxonomy. */
private List<String> listTaxonomy = new ArrayList<String>();
/** The list taxonomy name. */
private List<String> listTaxonomyName = new ArrayList<String>();
/** The template. */
private String template;
/**
* 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;
}
/** The preference component. */
private Class<? extends UIContentDialogPreference> preferenceComponent;
/**
* Gets the webcontent node location.
*
* @return the webcontent node location
*/
public NodeLocation getWebcontentNodeLocation() {
return webcontentNodeLocation;
}
/**
* Sets the webcontent node location.
*
* @param webcontentNodeLocation the new webcontent node location
*/
public void setWebcontentNodeLocation(NodeLocation webcontentNodeLocation) {
this.webcontentNodeLocation = webcontentNodeLocation;
}
/**
* Gets the preference component.
*
* @return the preference component
*/
public Class<? extends UIContentDialogPreference> getPreferenceComponent() {
return preferenceComponent;
}
/**
* Sets the preference component.
*
* @param preferenceComponent the new preference component
*/
public void setPreferenceComponent(Class<? extends UIContentDialogPreference> preferenceComponent) {
this.preferenceComponent = preferenceComponent;
}
/**
* Instantiates a new uI content dialog form.
*
* @throws Exception the exception
*/
public UIContentDialogForm() throws Exception {
setActions(new String [] {"SaveDraft", "FastPublish", "Preferences", "Close"});
}
/**
* Inits the.
*
* @param webcontent the webcontent
* @param isAddNew the is add new
*
* @throws Exception the exception
*/
public void init(Node webcontent, boolean isAddNew) throws Exception {
NodeLocation webcontentNodeLocation = null;
if(webcontent.isNodeType("exo:symlink")) {
LinkManager linkManager = getApplicationComponent(LinkManager.class);
Node realNode = linkManager.getTarget(webcontent);
webcontentNodeLocation = NodeLocation.getNodeLocationByNode(realNode);
this.contentType = realNode.getPrimaryNodeType().getName();
this.nodePath = realNode.getPath();
setStoredPath(getParentPath(realNode));
} else {
webcontentNodeLocation = NodeLocation.getNodeLocationByNode(webcontent);
this.contentType = webcontent.getPrimaryNodeType().getName();
this.nodePath = webcontent.getPath();
setStoredPath(getParentPath(webcontent));
}
this.webcontentNodeLocation = webcontentNodeLocation;
this.repositoryName = webcontentNodeLocation.getRepository();
this.workspaceName = webcontentNodeLocation.getWorkspace();
this.isAddNew = isAddNew;
resetProperties();
TemplateService templateService = getApplicationComponent(TemplateService.class) ;
String userName = Util.getPortalRequestContext().getRemoteUser();
this.template = templateService.getTemplatePathByUser(true, contentType, userName);
initFieldInput();
}
private String getParentPath(Node node) throws RepositoryException {
return node.getPath().substring(0, node.getPath().lastIndexOf('/'));
}
/**
* Inits the field input.
*
* @throws Exception the exception
*/
private void initFieldInput() throws Exception {
TemplateService tservice = this.getApplicationComponent(TemplateService.class);
List<String> documentNodeType = tservice.getDocumentTemplates();
if(!documentNodeType.contains(this.contentType)){
return;
}
if (!isAddNew) {
TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class);
Node currentNode = getCurrentNode();
List<Node> listCategories = taxonomyService.getAllCategories(currentNode);
for (Node itemNode : listCategories) {
String categoryPath = itemNode.getPath().replaceAll(getPathTaxonomy() + "/", "");
if (!listTaxonomy.contains(categoryPath)) {
listTaxonomy.add(categoryPath);
listTaxonomyName.add(categoryPath);
}
}
}
if(listTaxonomyName == null || listTaxonomyName.size() == 0) return;
UIFormMultiValueInputSet uiFormMultiValue = createUIComponent(UIFormMultiValueInputSet.class, null, null);
uiFormMultiValue.setId(FIELD_TAXONOMY);
uiFormMultiValue.setName(FIELD_TAXONOMY);
uiFormMultiValue.setType(UIFormStringInput.class);
uiFormMultiValue.setValue(listTaxonomyName);
addUIFormInput(uiFormMultiValue);
}
/**
* Gets the current node.
*
* @return the current node
*/
public Node getCurrentNode() {
return NodeLocation.getNodeByLocation(webcontentNodeLocation);
}
/* (non-Javadoc)
* @see org.exoplatform.ecm.webui.form.UIDialogForm#getTemplate()
*/
public String getTemplate() {
return template;
}
/*
* (non-Javadoc)
* @see
* org.exoplatform.webui.core.UIComponent#getTemplateResourceResolver(org.
* exoplatform.webui.application.WebuiRequestContext, java.lang.String)
*/
public ResourceResolver getTemplateResourceResolver(WebuiRequestContext context, String template) {
DMSConfiguration dmsConfiguration = getApplicationComponent(DMSConfiguration.class);
String workspace = dmsConfiguration.getConfig().getSystemWorkspace();
return new JCRResourceResolver(workspace);
}
/**
* The listener interface for receiving closeAction 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>addCloseActionListener</code> method. When
* the cancelAction event occurs, that object's appropriate
* method is invoked.
*/
static public class CloseActionListener extends EventListener<UIContentDialogForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
if (Util.getUIPortalApplication().getModeState() == UIPortalApplication.NORMAL_MODE)
((PortletRequestContext)event.getRequestContext()).setApplicationMode(PortletMode.VIEW);
Utils.closePopupWindow(contentDialogForm, CONTENT_DIALOG_FORM_POPUP_WINDOW);
}
}
/**
* The listener interface for receiving preferencesAction events.
* The class that is interested in processing a preferencesAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addPreferencesActionListener</code> method. When
* the PreferencesAction event occurs, that object's appropriate
* method is invoked.
*/
static public class PreferencesActionListener extends EventListener<UIContentDialogForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
UIPopupContainer popupContainer = Utils.getPopupContainer(contentDialogForm);
popupContainer.addChild(contentDialogForm);
contentDialogForm.setParent(popupContainer);
UIContentDialogPreference contentDialogPreference = null;
if (contentDialogForm.getPreferenceComponent() != null)
contentDialogPreference = contentDialogForm.createUIComponent(contentDialogForm.getPreferenceComponent(),
null,
null);
else
contentDialogPreference = contentDialogForm.createUIComponent(UIContentDialogPreference.class,
null,
null);
Utils.updatePopupWindow(contentDialogForm, contentDialogPreference, CONTENT_DIALOG_FORM_POPUP_WINDOW);
contentDialogPreference.init();
}
}
/**
* 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>addSaveDraftActionListener</code> method. When
* the saveAction event occurs, that object's appropriate
* method is invoked.
*/
public static class SaveDraftActionListener extends EventListener<UIContentDialogForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
try {
Node webContentNode = contentDialogForm.getNode();
if (!webContentNode.isCheckedOut()) {
webContentNode.checkout();
}
List<UIComponent> inputs = contentDialogForm.getChildren();
if (contentDialogForm.checkCategories(contentDialogForm)) {
Utils.createPopupMessage(contentDialogForm,
"UIContentDialogForm.msg.non-categories",
null,
ApplicationMessage.WARNING);
return;
}
Map<String, JcrInputProperty> inputProperties = DialogFormUtil.prepareMap(inputs,
contentDialogForm.getInputProperties(),
contentDialogForm.getInputOptions());
CmsService cmsService = contentDialogForm.getApplicationComponent(CmsService.class);
if (WCMCoreUtils.canAccessParentNode(webContentNode)) {
cmsService.storeNode(contentDialogForm.contentType,
webContentNode.getParent(),
inputProperties,
contentDialogForm.isAddNew);
} else {
cmsService.storeEditedNode(contentDialogForm.contentType,
webContentNode,
inputProperties,
contentDialogForm.isAddNew);
}
if (Util.getUIPortalApplication().getModeState() == UIPortalApplication.NORMAL_MODE) {
((PortletRequestContext) event.getRequestContext()).setApplicationMode(PortletMode.VIEW);
}
Utils.closePopupWindow(contentDialogForm, CONTENT_DIALOG_FORM_POPUP_WINDOW);
} catch(LockException le) {
Object[] args = {contentDialogForm.getNode().getPath()};
Utils.createPopupMessage(contentDialogForm, "UIContentDialogForm.msg.node-locked", args, ApplicationMessage.WARNING);
} catch(AccessControlException ace) {
if (LOG.isWarnEnabled()) {
LOG.warn(ace.getMessage());
}
} catch (AccessDeniedException ade) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentInfo.msg.access-denied-exception",
null,
ApplicationMessage.WARNING);
} catch(VersionException ve) {
Utils.createPopupMessage(contentDialogForm, "UIDocumentForm.msg.in-versioning", null, ApplicationMessage.WARNING);
} catch(ItemNotFoundException item) {
Utils.createPopupMessage(contentDialogForm, "UIDocumentForm.msg.item-not-found", null, ApplicationMessage.WARNING);
} catch(RepositoryException repo) {
String key = "UIDocumentForm.msg.repository-exception";
if (ItemExistsException.class.isInstance(repo)) key = "UIDocumentForm.msg.not-allowed-same-name-sibling";
Utils.createPopupMessage(contentDialogForm, key, null, ApplicationMessage.WARNING);
} catch (NumberFormatException nfe) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.numberformat-exception",
null,
ApplicationMessage.WARNING);
} catch (Exception e) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.cannot-save",
null,
ApplicationMessage.WARNING);
}
}
}
/**
* Check categories.
*
* @param contentDialogForm the content dialog form
*
* @return true, if successful
*/
private boolean checkCategories(UIContentDialogForm contentDialogForm) {
String[] categoriesPathList = null;
int index = 0;
if (contentDialogForm.isReference) {
UIFormMultiValueInputSet uiSet = contentDialogForm.getChild(UIFormMultiValueInputSet.class);
if ((uiSet != null) && (uiSet.getName() != null) && uiSet.getName().equals(FIELD_TAXONOMY)) {
List<UIComponent> listChildren = uiSet.getChildren();
StringBuffer sb = new StringBuffer();
for (UIComponent component : listChildren) {
UIFormStringInput uiStringInput = (UIFormStringInput) component;
if (uiStringInput.getValue() != null) {
String value = uiStringInput.getValue().trim();
sb.append(value).append(",");
}
}
String categoriesPath = sb.toString();
if (categoriesPath != null && categoriesPath.length() > 0) {
try {
if (categoriesPath.endsWith(",")) {
categoriesPath = categoriesPath.substring(0, categoriesPath.length() - 1).trim();
if (categoriesPath.trim().length() == 0) {
return true;
}
}
categoriesPathList = categoriesPath.split(",");
if ((categoriesPathList == null) || (categoriesPathList.length == 0)) {
return true;
}
for (String categoryPath : categoriesPathList) {
index = categoryPath.indexOf("/");
if (index < 0) {
return true;
}
}
} catch (Exception e) {
return true;
}
}
}
}
return false;
}
/**
* The listener interface for receiving fastPublishAction 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>addFastPublishActionListener</code> method. When
* the cancelAction event occurs, that object's appropriate
* method is invoked.
*/
public static class FastPublishActionListener extends EventListener<UIContentDialogForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
try{
Node webContentNode = contentDialogForm.getNode();
if (!webContentNode.isCheckedOut()) {
webContentNode.checkout();
}
List<UIComponent> inputs = contentDialogForm.getChildren();
if (contentDialogForm.checkCategories(contentDialogForm)) {
Utils.createPopupMessage(contentDialogForm,
"UIContentDialogForm.msg.non-categories",
null,
ApplicationMessage.WARNING);
return;
}
Map<String, JcrInputProperty> inputProperties = DialogFormUtil.prepareMap(inputs,
contentDialogForm.getInputProperties(),
contentDialogForm.getInputOptions());
CmsService cmsService = contentDialogForm.getApplicationComponent(CmsService.class);
cmsService.storeNode(contentDialogForm.contentType,
contentDialogForm.getNode().getParent(),
inputProperties,
contentDialogForm.isAddNew);
PublicationService publicationService = contentDialogForm.getApplicationComponent(PublicationService.class);
PublicationPlugin publicationPlugin = publicationService.getPublicationPlugins()
.get(publicationService.getNodeLifecycleName(webContentNode));
HashMap<String, String> context = new HashMap<String, String>();
if(webContentNode != null) {
context.put("Publication.context.currentVersion", webContentNode.getName());
}
publicationPlugin.changeState(webContentNode, PublicationDefaultStates.PUBLISHED, context);
if (Util.getUIPortalApplication().getModeState() == UIPortalApplication.NORMAL_MODE) {
((PortletRequestContext)event.getRequestContext()).setApplicationMode(PortletMode.VIEW);
}
Utils.closePopupWindow(contentDialogForm, CONTENT_DIALOG_FORM_POPUP_WINDOW);
} catch(LockException le) {
Object[] args = {contentDialogForm.getNode().getPath()};
Utils.createPopupMessage(contentDialogForm,
"UIContentDialogForm.msg.node-locked",
args,
ApplicationMessage.WARNING);
} catch (AccessControlException ace) {
if (LOG.isWarnEnabled()) {
LOG.warn(ace.getMessage());
}
} catch (AccessDeniedException ade) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentInfo.msg.access-denied-exception",
null,
ApplicationMessage.WARNING);
} catch (VersionException ve) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.in-versioning",
null,
ApplicationMessage.WARNING);
} catch (ItemNotFoundException item) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.item-not-found",
null,
ApplicationMessage.WARNING);
} catch (RepositoryException repo) {
String key = "UIDocumentForm.msg.repository-exception";
if (ItemExistsException.class.isInstance(repo))
key = "UIDocumentForm.msg.not-allowed-same-name-sibling";
Utils.createPopupMessage(contentDialogForm, key, null, ApplicationMessage.WARNING);
} catch (NumberFormatException nfe) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.numberformat-exception",
null,
ApplicationMessage.WARNING);
} catch (Exception e) {
Utils.createPopupMessage(contentDialogForm,
"UIDocumentForm.msg.cannot-save",
null,
ApplicationMessage.WARNING);
}
}
}
/**
* 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<UIContentDialogForm> {
/*
* (non-Javadoc)
* @see
* org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui
* .event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
String clickedField = event.getRequestContext().getRequestParameter(OBJECTID);
if (contentDialogForm.isReference) {
UIApplication uiApp = contentDialogForm.getAncestorOfType(UIApplication.class);
try {
UIFormMultiValueInputSet uiSet = contentDialogForm.getChildById(FIELD_TAXONOMY);
if ((uiSet != null) && (uiSet.getName() != null)
&& uiSet.getName().equals(FIELD_TAXONOMY)) {
if ((clickedField != null) && (clickedField.equals(FIELD_TAXONOMY))) {
NodeHierarchyCreator nodeHierarchyCreator = contentDialogForm.getApplicationComponent(NodeHierarchyCreator.class);
String repository = contentDialogForm.repositoryName;
DMSConfiguration dmsConfiguration = contentDialogForm.getApplicationComponent(DMSConfiguration.class);
DMSRepositoryConfiguration repositoryConfiguration = dmsConfiguration.getConfig();
String workspaceName = repositoryConfiguration.getSystemWorkspace();
UIOneTaxonomySelector uiOneTaxonomySelector = contentDialogForm.createUIComponent(UIOneTaxonomySelector.class,
null,
null);
if (uiSet.getValue().size() == 0)
uiSet.setValue(new ArrayList<Value>());
String rootTreePath = nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_STORAGE_PATH);
RepositoryService repositoryService = (RepositoryService) contentDialogForm.
getApplicationComponent(RepositoryService.class);
ManageableRepository manageableRepository = repositoryService.getCurrentRepository();
Session session = WCMCoreUtils.getUserSessionProvider()
.getSession(workspaceName, manageableRepository);
Node rootTree = (Node) session.getItem(rootTreePath);
NodeIterator childrenIterator = rootTree.getNodes();
while (childrenIterator.hasNext()) {
Node childNode = childrenIterator.nextNode();
rootTreePath = childNode.getPath();
break;
}
uiOneTaxonomySelector.setRootNodeLocation(repository, workspaceName, rootTreePath);
uiOneTaxonomySelector.setExceptedNodeTypesInPathPanel(new String[] { "exo:symlink" });
uiOneTaxonomySelector.init(WCMCoreUtils.getUserSessionProvider());
String param = "returnField=" + FIELD_TAXONOMY;
uiOneTaxonomySelector.setSourceComponent(contentDialogForm, new String[] { param });
Utils.createPopupWindow(contentDialogForm,
uiOneTaxonomySelector,
TAXONOMY_CONTENT_POPUP_WINDOW,
700);
}
}
} catch (AccessDeniedException accessDeniedException) {
uiApp.addMessage(new ApplicationMessage("UIContentDialogForm.msg.access-denied",
null,
ApplicationMessage.WARNING));
return;
} catch (Exception e) {
uiApp.addMessage(new ApplicationMessage("UIContentDialogForm.msg.exception",
null,
ApplicationMessage.WARNING));
return;
}
} else {
event.getRequestContext().addUIComponentToUpdateByAjax(contentDialogForm);
}
}
}
/* (non-Javadoc)
* @see org.exoplatform.webui.core.UIPopupComponent#activate()
*/
public void activate() {
}
/* (non-Javadoc)
* @see org.exoplatform.webui.core.UIPopupComponent#deActivate()
*/
public void deActivate() {
}
/* (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 {
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);
}
}
/**
* 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<UIContentDialogForm> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentDialogForm> event) throws Exception {
UIContentDialogForm contentDialogForm = event.getSource();
contentDialogForm.isRemovePreference = true;
String fieldName = event.getRequestContext().getRequestParameter(OBJECTID);
contentDialogForm.getUIStringInput(fieldName).setValue(null);
event.getRequestContext().addUIComponentToUpdateByAjax(contentDialogForm);
}
}
}