/* * Copyright (C) 2003-2009 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.config.action; import org.exoplatform.portal.webui.util.Util; import org.exoplatform.services.cms.actions.ActionServiceContainer; import org.exoplatform.services.cms.templates.TemplateService; import org.exoplatform.wcm.webui.fastcontentcreator.UIFCCPortlet; import org.exoplatform.wcm.webui.fastcontentcreator.UIFCCUtils; import org.exoplatform.wcm.webui.fastcontentcreator.config.UIFCCConfig; import org.exoplatform.web.application.ApplicationMessage; 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.lifecycle.UIFormLifecycle; import org.exoplatform.webui.core.model.SelectItemOption; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIForm; import org.exoplatform.webui.form.UIFormSelectBox; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created by The eXo Platform SAS * Author : eXoPlatform * chuong.phan@exoplatform.com, phan.le.thanh.chuong@gmail.com * Jun 25, 2009 */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "system:/groovy/FastContentCreatorPortlet/UIFCCActionTypeForm.gtmpl", events = { @EventConfig(listeners = UIFCCActionTypeForm.ChangeActionTypeActionListener.class) } ) public class UIFCCActionTypeForm extends UIForm { /** The Constant ACTION_TYPE. */ final static public String ACTION_TYPE = "actionType" ; /** The Constant CHANGE_ACTION. */ final static public String CHANGE_ACTION = "ChangeActionType" ; /** The type list_. */ private List<SelectItemOption<String>> typeList_ ; /** The node path. */ private String nodePath = null; /** The default action type_. */ public String defaultActionType_ ; /** * Instantiates a new uIFCC action type form. * * @throws Exception the exception */ public UIFCCActionTypeForm() throws Exception { typeList_ = new ArrayList<SelectItemOption<String>>() ; UIFormSelectBox uiSelectBox = new UIFormSelectBox(ACTION_TYPE, ACTION_TYPE, new ArrayList<SelectItemOption<String>>()); uiSelectBox.setOnChange(CHANGE_ACTION) ; addUIFormInput(uiSelectBox) ; } /** * Gets the created action types. * * @return the created action types * * @throws Exception the exception */ private Iterator<NodeType> getCreatedActionTypes() throws Exception { ActionServiceContainer actionService = getApplicationComponent(ActionServiceContainer.class) ; return actionService.getCreatedActionTypes(UIFCCUtils.getPreferenceRepository()).iterator(); } /** * Sets the default action type. * * @throws Exception the exception */ public void setDefaultActionType() throws Exception{ boolean isNews = true; UIFCCPortlet fastContentCreatorPortlet = getAncestorOfType(UIFCCPortlet.class); UIFCCConfig fastContentCreatorConfig = fastContentCreatorPortlet.getChild(UIFCCConfig.class); Node savedLocationNode = fastContentCreatorConfig.getSavedLocationNode() ; UIFCCActionContainer fastContentCreatorActionContainer = getParent() ; UIFCCActionForm fastContentCreatorActionForm = fastContentCreatorActionContainer.getChild(UIFCCActionForm.class); if(defaultActionType_ == null) { defaultActionType_ = "exo:addMetadataAction"; isNews = true; }else{ isNews = false; } fastContentCreatorActionForm.setNodePath(nodePath) ; getUIFormSelectBox(ACTION_TYPE).setValue(defaultActionType_).setDisabled(!isNews); fastContentCreatorActionForm.createNewAction(savedLocationNode, defaultActionType_, isNews); fastContentCreatorActionForm.setWorkspace(savedLocationNode.getSession() .getWorkspace() .getName()); fastContentCreatorActionForm.setStoredPath(savedLocationNode.getPath()); } /** * Update. * * @throws Exception the exception */ public void update() throws Exception { Iterator<NodeType> actions = getCreatedActionTypes(); while(actions.hasNext()){ String action = actions.next().getName(); typeList_.add(new SelectItemOption<String>(action, action)); } getUIFormSelectBox(ACTION_TYPE).setOptions(typeList_) ; setDefaultActionType() ; } /** * Inits the. * * @param nodePath the node path * @param actionType the action type * * @throws RepositoryException the repository exception */ public void init(String nodePath, String actionType) throws RepositoryException { this.nodePath = nodePath; this.defaultActionType_ = actionType; } /** * The listener interface for receiving changeActionTypeAction events. * The class that is interested in processing a changeActionTypeAction * event implements this interface, and the object created * with that class is registered with a component using the * component's <code>addChangeActionTypeActionListener</code> method. When * the changeActionTypeAction event occurs, that object's appropriate * method is invoked. */ static public class ChangeActionTypeActionListener extends EventListener<UIFCCActionTypeForm> { /* (non-Javadoc) * @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event) */ public void execute(Event<UIFCCActionTypeForm> event) throws Exception { UIFCCActionTypeForm fastContentCreatorActionTypeForm = event.getSource() ; UIFCCPortlet fastContentCreatorPortlet = fastContentCreatorActionTypeForm.getAncestorOfType(UIFCCPortlet.class); UIFCCConfig fastContentCreatorConfig = fastContentCreatorPortlet.getChild(UIFCCConfig.class); Node currentNode = fastContentCreatorConfig.getSavedLocationNode() ; String actionType = fastContentCreatorActionTypeForm.getUIFormSelectBox(ACTION_TYPE).getValue() ; TemplateService templateService = fastContentCreatorActionTypeForm.getApplicationComponent(TemplateService.class) ; String userName = Util.getPortalRequestContext().getRemoteUser() ; UIApplication uiApp = fastContentCreatorActionTypeForm.getAncestorOfType(UIApplication.class) ; try { String templatePath = templateService.getTemplatePathByUser(true, actionType, userName) ; if (templatePath == null) { Object[] arg = { actionType }; uiApp.addMessage(new ApplicationMessage("UIFastContentCreatorActionTypeForm.msg.access-denied", arg, ApplicationMessage.WARNING)); actionType = "exo:addMetadataAction" ; fastContentCreatorActionTypeForm.getUIFormSelectBox(UIFCCActionTypeForm.ACTION_TYPE).setValue(actionType) ; UIFCCActionContainer fastContentCreatorActionContainer = fastContentCreatorActionTypeForm. getAncestorOfType(UIFCCActionContainer.class); UIFCCActionForm fastContentCreatorActionForm = fastContentCreatorActionContainer.getChild(UIFCCActionForm.class); fastContentCreatorActionForm.createNewAction(currentNode, actionType, true); event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorActionContainer); return ; } } catch (PathNotFoundException path) { Object[] arg = { actionType } ; uiApp.addMessage(new ApplicationMessage("UIFastContentCreatorActionTypeForm.msg.not-support", arg, ApplicationMessage.WARNING)); actionType = "exo:addMetadataAction" ; fastContentCreatorActionTypeForm.getUIFormSelectBox(UIFCCActionTypeForm.ACTION_TYPE).setValue(actionType) ; UIFCCActionContainer fastContentCreatorActionContainer = fastContentCreatorActionTypeForm. getAncestorOfType(UIFCCActionContainer.class); UIFCCActionForm fastContentCreatorActionForm = fastContentCreatorActionContainer.getChild(UIFCCActionForm.class); fastContentCreatorActionForm.createNewAction(currentNode, actionType, true); event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorActionContainer); } UIFCCActionContainer fastContentCreatorActionContainer = fastContentCreatorActionTypeForm.getParent(); UIFCCActionForm uiActionForm = fastContentCreatorActionContainer.getChild(UIFCCActionForm.class); uiActionForm.createNewAction(currentNode, actionType, true); event.getRequestContext().addUIComponentToUpdateByAjax(fastContentCreatorActionContainer); } } }