/***************************************************************************
* 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.ecm.webui.component.admin.taxonomy.action;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NodeType;
import org.exoplatform.ecm.webui.component.admin.UIECMAdminPortlet;
import org.exoplatform.ecm.webui.component.admin.taxonomy.UITaxonomyTreeContainer;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.cms.actions.ActionServiceContainer;
import org.exoplatform.services.cms.taxonomy.TaxonomyService;
import org.exoplatform.services.cms.taxonomy.TaxonomyTreeData;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
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;
/**
* Created by The eXo Platform SARL Author : Hoang Van Hung hunghvit@gmail.com
* Apr 5, 2009
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/groovy/webui/component/admin/taxonomy/UIFormWithoutAction.gtmpl",
events = @EventConfig(listeners = UIActionTypeForm.ChangeActionTypeActionListener.class)
)
public class UIActionTypeForm extends UIForm {
final static public String ACTION_TYPE = "actionType";
final static public String CHANGE_ACTION = "ChangeActionType";
private static final Log LOG = ExoLogger.getLogger(UIActionTypeForm.class.getName());
private List<SelectItemOption<String>> typeList_;
public String defaultActionType_;
public UIActionTypeForm() throws Exception {
UIFormSelectBox uiSelectBox = new UIFormSelectBox(ACTION_TYPE, ACTION_TYPE,
new ArrayList<SelectItemOption<String>>());
uiSelectBox.setOnChange(CHANGE_ACTION);
addUIFormInput(uiSelectBox);
}
private Iterator getCreatedActionTypes() throws Exception {
ActionServiceContainer actionService = getApplicationComponent(ActionServiceContainer.class);
String repository = getAncestorOfType(UIECMAdminPortlet.class).getPreferenceRepository();
return actionService.getCreatedActionTypes(repository).iterator();
}
public void setDefaultActionType(String actionType) throws Exception {
defaultActionType_ = actionType;
if (actionType == null) {
defaultActionType_ = "exo:taxonomyAction";
}
List<SelectItemOption<String>> actionTypeList = new ArrayList<SelectItemOption<String>>();
actionTypeList.add(new SelectItemOption<String>(defaultActionType_, defaultActionType_));
getUIFormSelectBox(ACTION_TYPE).setOptions(actionTypeList);
getUIFormSelectBox(ACTION_TYPE).setValue(defaultActionType_);
}
public void update() throws Exception {
Iterator actions = getCreatedActionTypes();
if (actions != null && actions.hasNext()) {
typeList_ = new ArrayList<SelectItemOption<String>>();
while (actions.hasNext()) {
String action = ((NodeType) actions.next()).getName();
typeList_.add(new SelectItemOption<String>(action, action));
}
getUIFormSelectBox(ACTION_TYPE).setOptions(typeList_);
setDefaultActionType(defaultActionType_);
}
}
public static class ChangeActionTypeActionListener extends EventListener<UIActionTypeForm> {
public void execute(Event<UIActionTypeForm> event) throws Exception {
UIActionTypeForm uiActionType = event.getSource();
UITaxonomyTreeContainer uiTaxonomyTreeContainer = uiActionType
.getAncestorOfType(UITaxonomyTreeContainer.class);
String actionType = uiActionType.getUIFormSelectBox(ACTION_TYPE).getValue();
TemplateService templateService = uiActionType.getApplicationComponent(TemplateService.class);
UIActionTaxonomyManager uiActionTaxonomyManager = uiActionType
.getAncestorOfType(UIActionTaxonomyManager.class);
String userName = Util.getPortalRequestContext().getRemoteUser();
UIApplication uiApp = uiActionType.getAncestorOfType(UIApplication.class);
UIActionForm uiActionForm = uiActionTaxonomyManager.getChild(UIActionForm.class);
try {
String templatePath = templateService.getTemplatePathByUser(true, actionType, userName);
if (templatePath == null) {
Object[] arg = { actionType };
uiApp.addMessage(new ApplicationMessage("UIActionForm.msg.access-denied", arg,
ApplicationMessage.WARNING));
actionType = TaxonomyTreeData.ACTION_TAXONOMY_TREE;
uiActionType.getUIFormSelectBox(UIActionTypeForm.ACTION_TYPE).setValue(actionType);
}
} catch (PathNotFoundException path) {
Object[] arg = { actionType };
uiApp.addMessage(new ApplicationMessage("UIActionForm.msg.not-support", arg,
ApplicationMessage.WARNING));
actionType = TaxonomyTreeData.ACTION_TAXONOMY_TREE;
uiActionType.getUIFormSelectBox(UIActionTypeForm.ACTION_TYPE).setValue(actionType);
}
TaxonomyTreeData taxoTreeData = uiTaxonomyTreeContainer.getTaxonomyTreeData();
TaxonomyService taxonomyService = uiTaxonomyTreeContainer.getApplicationComponent(TaxonomyService.class);
Node taxoTreeNode = null;
try {
taxoTreeNode = taxonomyService.getTaxonomyTree(taxoTreeData.getTaxoTreeName(),
true);
} catch (RepositoryException re) {
if (LOG.isWarnEnabled()) {
LOG.warn(re.getMessage());
}
}
uiActionForm.createNewAction(taxoTreeNode, actionType, true);
uiActionTaxonomyManager.setRendered(true);
event.getRequestContext().addUIComponentToUpdateByAjax(uiActionTaxonomyManager);
}
}
}