1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.exoplatform.ecm.webui.component.admin.taxonomy;
19
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.Comparator;
23 import java.util.List;
24
25 import org.exoplatform.ecm.webui.component.admin.taxonomy.tree.info.UIPermissionTreeManager;
26 import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
27 import org.exoplatform.ecm.webui.form.validator.ECMNameValidator;
28 import org.exoplatform.ecm.webui.utils.Utils;
29 import org.exoplatform.services.cms.BasePath;
30 import org.exoplatform.services.cms.taxonomy.TaxonomyService;
31 import org.exoplatform.services.cms.taxonomy.TaxonomyTreeData;
32 import org.exoplatform.services.jcr.RepositoryService;
33 import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
34 import org.exoplatform.web.application.ApplicationMessage;
35 import org.exoplatform.webui.config.annotation.ComponentConfig;
36 import org.exoplatform.webui.config.annotation.EventConfig;
37 import org.exoplatform.webui.core.UIApplication;
38 import org.exoplatform.webui.core.UIPopupWindow;
39 import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
40 import org.exoplatform.webui.core.model.SelectItemOption;
41 import org.exoplatform.webui.event.Event;
42 import org.exoplatform.webui.event.Event.Phase;
43 import org.exoplatform.webui.event.EventListener;
44 import org.exoplatform.webui.form.UIForm;
45 import org.exoplatform.webui.form.UIFormInputBase;
46 import org.exoplatform.webui.form.UIFormSelectBox;
47 import org.exoplatform.webui.form.UIFormStringInput;
48 import org.exoplatform.webui.form.validator.MandatoryValidator;
49
50
51
52
53
54
55
56
57
58 @ComponentConfig(
59 lifecycle = UIFormLifecycle.class,
60 template = "system:/groovy/webui/form/UIForm.gtmpl",
61 events = {
62 @EventConfig(listeners = UITaxonomyTreeMainForm.ChangeActionListener.class, phase = Phase.DECODE),
63 @EventConfig(listeners = UITaxonomyTreeMainForm.ResetActionListener.class, phase = Phase.DECODE),
64 @EventConfig(listeners = UITaxonomyTreeMainForm.CancelActionListener.class, phase=Phase.DECODE),
65 @EventConfig(listeners = UITaxonomyTreeMainForm.AddPathActionListener.class, phase = Phase.DECODE),
66 @EventConfig(listeners = UITaxonomyTreeMainForm.NextViewPermissionActionListener.class)
67 }
68 )
69
70 public class UITaxonomyTreeMainForm extends UIForm {
71
72 public static final String FIELD_NAME = "TaxoTreeName";
73
74 public static final String FIELD_WORKSPACE = "TaxoTreeWorkspace";
75
76 public static final String FIELD_HOMEPATH = "TaxoTreeHomePath";
77
78 public UITaxonomyTreeMainForm() throws Exception {
79 addUIFormInput(new UIFormStringInput(FIELD_NAME, FIELD_NAME, null)
80 .addValidator(MandatoryValidator.class).addValidator(ECMNameValidator.class));
81 UIFormSelectBox uiSelectWorkspace = new UIFormSelectBox(FIELD_WORKSPACE, FIELD_WORKSPACE, null);
82 addChild(uiSelectWorkspace);
83 uiSelectWorkspace.setOnChange("Change");
84 UIFormInputSetWithAction uiActionHomePath = new UIFormInputSetWithAction("TaxonomyTreeHomePath");
85 uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null)
86 .setReadOnly(true));
87 uiActionHomePath.setActionInfo(FIELD_HOMEPATH, new String[] { "AddPath" });
88 addUIComponentInput(uiActionHomePath);
89 setActions(new String[] {"NextViewPermission","Reset"});
90 }
91
92 public void update(TaxonomyTreeData taxonomyTree) throws Exception {
93 String[] wsNames = getApplicationComponent(RepositoryService.class)
94 .getCurrentRepository().getWorkspaceNames();
95 List<SelectItemOption<String>> workspace = new ArrayList<SelectItemOption<String>>();
96 String systemWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getSystemWorkspaceName();
97 String dmsSystemWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getDmsSystemWorkspaceName();
98
99 for(String wsName : wsNames) {
100 if (!systemWorkspace.equals(wsName))
101 workspace.add(new SelectItemOption<String>(wsName, wsName));
102 }
103 if (taxonomyTree == null) taxonomyTree = new TaxonomyTreeData();
104
105
106 Comparator<SelectItemOption<String>> comparator = new Comparator<SelectItemOption<String>>(){
107 @Override
108 public int compare(SelectItemOption<String> option1, SelectItemOption<String> option2) {
109 try {
110 return option1.getValue().compareToIgnoreCase(option2.getValue());
111 }catch (Exception ex){
112 return 0;
113 }
114 }
115 };
116 Collections.sort(workspace, comparator);
117 UIFormSelectBox uiSelectBox = getUIFormSelectBox(FIELD_WORKSPACE).setOptions(workspace);
118 if (taxonomyTree.getTaxoTreeWorkspace() == null) {
119 taxonomyTree.setTaxoTreeWorkspace(dmsSystemWorkspace);
120 }
121 uiSelectBox.setValue(taxonomyTree.getTaxoTreeWorkspace());
122 UIFormInputBase<String> inputName = findComponentById(FIELD_NAME);
123 UIFormInputBase<String> inputHomePath = findComponentById(FIELD_HOMEPATH);
124 String treeName = taxonomyTree.getTaxoTreeName();
125
126 TaxonomyTreeData taxonomyTreeData = ((UITaxonomyTreeContainer)getParent()).getTaxonomyTreeData();
127 if (taxonomyTreeData == null || !taxonomyTreeData.isEdit())
128 inputName.setValue(treeName);
129 else
130 inputName.setValue(taxonomyTreeData.getTaxoTreeName());
131 inputHomePath.setValue(taxonomyTree.getTaxoTreeHomePath());
132 getUIStringInput(FIELD_NAME).setReadOnly(false);
133 if((taxonomyTree != null && taxonomyTree.isEdit()) || (taxonomyTreeData != null && taxonomyTreeData.isEdit())) {
134 getUIStringInput(FIELD_NAME).setReadOnly(true);
135 }
136 }
137
138 int checkForm() throws Exception {
139 UIFormStringInput input = getChildById(FIELD_WORKSPACE);
140 if (input == null || input.getValue() == null || input.getValue().length() == 0) {
141 return 1;
142 }
143 UIFormSelectBox selectBox = getChildById(FIELD_WORKSPACE);
144 UIFormInputBase<String> inputHomePath = findComponentById(FIELD_HOMEPATH);
145 String homePath = "";
146 if (inputHomePath != null && inputHomePath.getValue() != null) {
147 homePath = inputHomePath.getValue().toString();
148 }
149 String dmsSysWorkspace = getAncestorOfType(UITaxonomyManagerTrees.class).getDmsSystemWorkspaceName();
150 String workspace = selectBox.getValue();
151 if (homePath.length() == 0) {
152 if (!dmsSysWorkspace.equals(workspace)) {
153 return 2;
154 }
155 }
156 return 0;
157 }
158
159 public static class AddPathActionListener extends EventListener<UITaxonomyTreeMainForm> {
160 public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception {
161 UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource();
162 UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyManagerTrees.class);
163 String workspace =
164 uiTaxonomyTreeForm.getUIFormSelectBox(FIELD_WORKSPACE).getValue();
165 uiTaxonomyManagerTrees.initPopupJCRBrowser(workspace, true);
166 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
167 }
168 }
169
170 public static class ChangeActionListener extends EventListener<UITaxonomyTreeMainForm> {
171 public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception {
172 UITaxonomyTreeMainForm uiTaxonomyTreeMainForm = event.getSource();
173 UITaxonomyTreeContainer uiTaxonomyTreeContainer = uiTaxonomyTreeMainForm.getParent();
174 UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeMainForm.getAncestorOfType(UITaxonomyManagerTrees.class);
175 uiTaxonomyTreeMainForm.getUIStringInput(FIELD_HOMEPATH).setValue("");
176 TaxonomyTreeData taxonomyTreeData = uiTaxonomyTreeContainer.getTaxonomyTreeData();
177 UIFormSelectBox selectBox = uiTaxonomyTreeMainForm.getChildById(FIELD_WORKSPACE);
178 taxonomyTreeData.setTaxoTreeHomePath("");
179 taxonomyTreeData.setTaxoTreeWorkspace(selectBox.getValue());
180
181 String dmsSysWorkspace = uiTaxonomyManagerTrees.getDmsSystemWorkspaceName();
182 UIFormInputSetWithAction uiActionHomePath = uiTaxonomyTreeMainForm.getChildById("TaxonomyTreeHomePath");
183 uiActionHomePath.removeChildById(FIELD_HOMEPATH);
184 if (!selectBox.getValue().equals(dmsSysWorkspace)) {
185 uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null).
186 addValidator(MandatoryValidator.class).setReadOnly(true));
187 } else {
188 uiActionHomePath.addUIFormInput(new UIFormStringInput(FIELD_HOMEPATH, FIELD_HOMEPATH, null).setReadOnly(true));
189 }
190 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
191 }
192 }
193
194 public static class NextViewPermissionActionListener extends EventListener<UITaxonomyTreeMainForm> {
195 public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception {
196 UITaxonomyTreeMainForm uiTaxonomyTreeMainForm = event.getSource();
197 UITaxonomyTreeContainer uiTaxonomyTreeContainer = uiTaxonomyTreeMainForm.getParent();
198 TaxonomyTreeData taxonomyTreeData = uiTaxonomyTreeContainer.getTaxonomyTreeData();
199 UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeContainer.getAncestorOfType(UITaxonomyManagerTrees.class);
200 UIApplication uiApp = uiTaxonomyTreeContainer.getAncestorOfType(UIApplication.class);
201 int validateCode = uiTaxonomyTreeMainForm.checkForm();
202 if (validateCode == 1) {
203 uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.name-emty", null,
204 ApplicationMessage.WARNING));
205
206 return;
207 } else if (validateCode == 2) {
208 uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.homepath-emty", null,
209 ApplicationMessage.WARNING));
210
211 return;
212 }
213
214 UIFormInputBase<String> inputName = uiTaxonomyTreeMainForm.findComponentById(FIELD_NAME);
215 String name = inputName.getValue().toString().trim();
216
217 TaxonomyService taxonomyService = uiTaxonomyTreeMainForm.getApplicationComponent(TaxonomyService.class);
218 if (taxonomyService.hasTaxonomyTree(name) && !taxonomyTreeData.isEdit()) {
219 uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.taxonomytree-existed", null,
220 ApplicationMessage.WARNING));
221
222 return;
223 }
224
225 UIFormSelectBox selectBox = uiTaxonomyTreeMainForm.getChildById(FIELD_WORKSPACE);
226 UIFormInputBase<String> inputHomePath = uiTaxonomyTreeMainForm.findComponentById(FIELD_HOMEPATH);
227 String homePath = "";
228 if (inputHomePath != null && inputHomePath.getValue() != null) homePath =inputHomePath.getValue().toString();
229 NodeHierarchyCreator nodeHierarchyCreator = uiTaxonomyTreeMainForm.getApplicationComponent(NodeHierarchyCreator.class);
230 String treeDefinitionPath = nodeHierarchyCreator.getJcrPath(BasePath.TAXONOMIES_TREE_DEFINITION_PATH);
231 if ((homePath.length() > 0) && (treeDefinitionPath != null)
232 && (treeDefinitionPath.length() > 0) && (homePath.equals(treeDefinitionPath))) {
233 uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeMainForm.msg.no-right-target-path", null,
234 ApplicationMessage.WARNING));
235
236 return;
237 }
238 UIPermissionTreeManager uiPermissionManage = uiTaxonomyTreeContainer.getChild(UIPermissionTreeManager.class);
239 taxonomyTreeData.setTaxoTreeName(name);
240 taxonomyTreeData.setTaxoTreeHomePath(homePath.trim());
241 taxonomyTreeData.setTaxoTreeWorkspace(selectBox.getValue());
242 uiTaxonomyTreeContainer.viewStep(2);
243 uiPermissionManage.update();
244 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
245 }
246 }
247
248 public static class ResetActionListener extends EventListener<UITaxonomyTreeMainForm> {
249 public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception {
250 UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource();
251 UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyManagerTrees.class);
252 uiTaxonomyTreeForm.getUIStringInput(FIELD_NAME).setValue("");
253 uiTaxonomyTreeForm.getUIStringInput(FIELD_HOMEPATH).setValue("");
254 uiTaxonomyTreeForm.update(null);
255 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
256 }
257 }
258
259 static public class CancelActionListener extends EventListener<UITaxonomyTreeMainForm> {
260 public void execute(Event<UITaxonomyTreeMainForm> event) throws Exception {
261 UITaxonomyTreeMainForm uiTaxonomyTreeForm = event.getSource();
262 UITaxonomyTreeContainer uiContainer = uiTaxonomyTreeForm.getAncestorOfType(UITaxonomyTreeContainer.class);
263 UIPopupWindow uiPopupWindow = uiContainer.getParent();
264 uiPopupWindow.setRendered(false) ;
265 event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupWindow) ;
266 }
267 }
268
269 }