1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.ecm.webui.tree.selectone;
18
19 import java.util.ArrayList;
20 import java.util.List;
21 import java.util.MissingResourceException;
22 import java.util.ResourceBundle;
23
24 import javax.jcr.AccessDeniedException;
25 import javax.jcr.Node;
26 import javax.jcr.RepositoryException;
27
28 import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
29 import org.exoplatform.ecm.webui.selector.UISelectable;
30 import org.exoplatform.ecm.webui.tree.UIBaseNodeTreeSelector;
31 import org.exoplatform.ecm.webui.tree.UITreeTaxonomyBuilder;
32 import org.exoplatform.portal.webui.util.Util;
33 import org.exoplatform.services.cms.taxonomy.TaxonomyService;
34 import org.exoplatform.services.jcr.RepositoryService;
35 import org.exoplatform.services.jcr.core.ManageableRepository;
36 import org.exoplatform.services.jcr.ext.common.SessionProvider;
37 import org.exoplatform.services.log.ExoLogger;
38 import org.exoplatform.services.log.Log;
39 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
40 import org.exoplatform.web.application.ApplicationMessage;
41 import org.exoplatform.web.application.RequestContext;
42 import org.exoplatform.webui.config.annotation.ComponentConfig;
43 import org.exoplatform.webui.config.annotation.EventConfig;
44 import org.exoplatform.webui.core.UIApplication;
45 import org.exoplatform.webui.core.UIBreadcumbs;
46 import org.exoplatform.webui.core.UIComponent;
47 import org.exoplatform.webui.core.UIPopupWindow;
48 import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
49 import org.exoplatform.webui.core.model.SelectItemOption;
50 import org.exoplatform.webui.event.Event;
51 import org.exoplatform.webui.event.EventListener;
52 import org.exoplatform.webui.form.UIForm;
53 import org.exoplatform.webui.form.UIFormInputInfo;
54 import org.exoplatform.webui.form.UIFormSelectBox;
55
56
57
58
59
60
61
62 @ComponentConfig(
63 lifecycle = UIFormLifecycle.class,
64 template = "classpath:groovy/ecm/webui/form/UIFormWithoutAction.gtmpl",
65 events = {
66 @EventConfig(listeners = UITreeTaxonomyList.ChangeTaxonomyTreeActionListener.class),
67 @EventConfig(listeners = UITreeTaxonomyList.AddRootNodeActionListener.class)
68 }
69 )
70 public class UITreeTaxonomyList extends UIForm {
71
72 static private String ROOT_NODE_INFO = "rootNodeInfo";
73 static private String ROOT_NODE_PATH = "rootNodePath";
74 public static String TAXONOMY_TREE = "taxonomyTree";
75 private static final Log LOG = ExoLogger.getLogger(UITreeTaxonomyList.class.getName());
76 private boolean isShowSystem_ = true;
77
78 public UITreeTaxonomyList() throws Exception {
79 List<SelectItemOption<String>> taxonomyTreeList = new ArrayList<SelectItemOption<String>>();
80 UIFormSelectBox uiTaxonomyTreeList = new UIFormSelectBox(TAXONOMY_TREE, TAXONOMY_TREE, taxonomyTreeList);
81 uiTaxonomyTreeList.setOnChange("ChangeTaxonomyTree");
82 addUIFormInput(uiTaxonomyTreeList);
83
84 UIFormInputSetWithAction rootNodeInfo = new UIFormInputSetWithAction(ROOT_NODE_INFO);
85 rootNodeInfo.addUIFormInput(new UIFormInputInfo(ROOT_NODE_PATH, ROOT_NODE_PATH, null));
86 String[] actionInfor = {"AddRootNode"};
87 rootNodeInfo.setActionInfo(ROOT_NODE_PATH, actionInfor);
88 rootNodeInfo.showActionInfo(true);
89 rootNodeInfo.setRendered(true);
90 addUIComponentInput(rootNodeInfo);
91 }
92
93 public void setIsShowSystem(boolean isShowSystem) { isShowSystem_ = isShowSystem; }
94
95 public boolean isShowSystemWorkspace() { return isShowSystem_; }
96
97 public void setShowRootPathSelect(boolean isRender) {
98 UIFormInputSetWithAction uiInputAction = getChildById(ROOT_NODE_INFO);
99 uiInputAction.setRendered(isRender);
100 }
101
102 private String getTaxonomyLabel(String taxonomyTree) {
103 String display = taxonomyTree;
104 RequestContext context = Util.getPortalRequestContext();
105 ResourceBundle res = context.getApplicationResourceBundle();
106 try {
107 return res.getString(("eXoTaxonomies.").concat(taxonomyTree).concat(".label"));
108 } catch (MissingResourceException me) {
109 return display;
110 }
111 }
112
113 public void setTaxonomyTreeList() throws Exception {
114 TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class);
115 List<Node> listNode = taxonomyService.getAllTaxonomyTrees();
116 List<SelectItemOption<String>> taxonomyTree = new ArrayList<SelectItemOption<String>>();
117 for(Node itemNode : listNode) {
118 taxonomyTree.add(new SelectItemOption<String>(getTaxonomyLabel(itemNode.getName()), itemNode.getName()));
119 }
120 UIFormSelectBox uiTreeTaxonomyList = getUIFormSelectBox(TAXONOMY_TREE);
121 uiTreeTaxonomyList.setOptions(taxonomyTree);
122 }
123
124 private Node getRootNode(String workspaceName, String pathNode) throws RepositoryException {
125 RepositoryService repositoryService = getApplicationComponent(RepositoryService.class);
126 ManageableRepository manageableRepository = repositoryService.getCurrentRepository();
127 SessionProvider sessionProvider = WCMCoreUtils.getUserSessionProvider();
128 return (Node) sessionProvider.getSession(workspaceName, manageableRepository).getItem(pathNode);
129 }
130
131 static public class ChangeTaxonomyTreeActionListener extends EventListener<UITreeTaxonomyList> {
132 public void execute(Event<UITreeTaxonomyList> event) throws Exception {
133 UITreeTaxonomyList uiTreeTaxonomyList = event.getSource();
134 UIOneTaxonomySelector uiOneTaxonomySelector = uiTreeTaxonomyList.getParent();
135 String taxoTreeName = uiTreeTaxonomyList.getUIFormSelectBox(TAXONOMY_TREE).getValue();
136 Node taxoTreeNode = uiOneTaxonomySelector.getTaxoTreeNode(taxoTreeName);
137 String workspaceName = taxoTreeNode.getSession().getWorkspace().getName();
138 String pathTaxonomy = taxoTreeNode.getPath();
139 UIApplication uiApp = uiTreeTaxonomyList.getAncestorOfType(UIApplication.class);
140 if (taxoTreeNode.hasNodes()) {
141 uiOneTaxonomySelector.setWorkspaceName(workspaceName);
142 uiOneTaxonomySelector.setRootTaxonomyName(taxoTreeNode.getName());
143 uiOneTaxonomySelector.setRootTreePath(taxoTreeNode.getPath());
144 UIBreadcumbs uiBreadcumbs = uiOneTaxonomySelector.getChildById("BreadcumbOneTaxonomy");
145 uiBreadcumbs.getPath().clear();
146 UITreeTaxonomyBuilder uiTreeJCRExplorer = uiOneTaxonomySelector.getChild(UITreeTaxonomyBuilder.class);
147 try {
148 uiTreeJCRExplorer.setRootTreeNode(uiTreeTaxonomyList.getRootNode(workspaceName, pathTaxonomy));
149 uiTreeJCRExplorer.buildTree();
150 } catch (AccessDeniedException ade) {
151 UIFormSelectBox uiTaxonomyTree = uiTreeTaxonomyList.getUIFormSelectBox(TAXONOMY_TREE);
152 List<SelectItemOption<String>> taxonomyTree = uiTaxonomyTree.getOptions();
153 if (taxonomyTree != null && taxonomyTree.size() > 0)
154 uiTaxonomyTree.setValue(taxonomyTree.get(0).getValue());
155
156 uiApp.addMessage(new ApplicationMessage("UIWorkspaceList.msg.AccessDeniedException", null, ApplicationMessage.WARNING));
157 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyTree.getParent());
158 return;
159 } catch(Exception e) {
160 if (LOG.isErrorEnabled()) {
161 LOG.error("Unexpected error", e);
162 }
163 return;
164 }
165 } else {
166 UIFormSelectBox uiTaxonomyTree = uiTreeTaxonomyList.getUIFormSelectBox(TAXONOMY_TREE);
167 List<SelectItemOption<String>> taxonomyTree = uiTaxonomyTree.getOptions();
168 if (taxonomyTree != null && taxonomyTree.size() > 0)
169 uiTaxonomyTree.setValue(taxonomyTree.get(0).getValue());
170 uiApp.addMessage(new ApplicationMessage("UITreeTaxonomyList.msg.NoChild", null, ApplicationMessage.WARNING));
171 return;
172 }
173 event.getRequestContext().addUIComponentToUpdateByAjax(uiOneTaxonomySelector);
174 }
175 }
176
177 static public class AddRootNodeActionListener extends EventListener<UITreeTaxonomyList> {
178 public void execute(Event<UITreeTaxonomyList> event) throws Exception {
179 UITreeTaxonomyList uiTreeTaxonomyList = event.getSource();
180 String taxoTreeName = uiTreeTaxonomyList.getUIFormSelectBox(TAXONOMY_TREE).getValue();
181 UIOneTaxonomySelector uiTaxonomySelector = uiTreeTaxonomyList.getParent();
182 String returnField = ((UIBaseNodeTreeSelector) uiTaxonomySelector).getReturnFieldName();
183 ((UISelectable)((UIBaseNodeTreeSelector) uiTaxonomySelector).getSourceComponent()).doSelect(returnField, taxoTreeName) ;
184 UIComponent uiComponent = uiTaxonomySelector.getParent();
185 if (uiComponent instanceof UIPopupWindow) {
186 ((UIPopupWindow)uiComponent).setShow(false);
187 ((UIPopupWindow)uiComponent).setRendered(false);
188 event.getRequestContext().addUIComponentToUpdateByAjax(uiComponent);
189 }
190 UIComponent component = uiTaxonomySelector.getSourceComponent().getParent();
191 if (component != null) {
192 event.getRequestContext().addUIComponentToUpdateByAjax(component);
193 }
194 }
195 }
196 }