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 org.exoplatform.commons.utils.LazyPageList;
21 import org.exoplatform.commons.utils.ListAccess;
22 import org.exoplatform.commons.utils.ListAccessImpl;
23 import org.exoplatform.ecm.webui.component.admin.UIECMAdminPortlet;
24 import org.exoplatform.ecm.webui.core.UIPagingGridDecorator;
25 import org.exoplatform.ecm.webui.utils.Utils;
26 import org.exoplatform.services.cms.actions.ActionServiceContainer;
27 import org.exoplatform.services.cms.taxonomy.TaxonomyService;
28 import org.exoplatform.services.cms.taxonomy.TaxonomyTreeData;
29 import org.exoplatform.services.log.ExoLogger;
30 import org.exoplatform.services.log.Log;
31 import org.exoplatform.web.application.ApplicationMessage;
32 import org.exoplatform.webui.config.annotation.ComponentConfig;
33 import org.exoplatform.webui.config.annotation.EventConfig;
34 import org.exoplatform.webui.core.UIApplication;
35 import org.exoplatform.webui.event.Event;
36 import org.exoplatform.webui.event.EventListener;
37
38 import javax.jcr.Node;
39 import javax.jcr.RepositoryException;
40 import javax.jcr.Value;
41 import javax.jcr.ValueFormatException;
42 import java.util.ArrayList;
43 import java.util.List;
44
45
46
47
48
49
50 @ComponentConfig(
51 template = "app:/groovy/webui/component/admin/taxonomy/UITaxonomyTreeList.gtmpl",
52 events = {
53 @EventConfig(listeners = UITaxonomyTreeList.DeleteActionListener.class, confirm = "UITaxonomyTreeList.msg.confirm-delete"),
54 @EventConfig(listeners = UITaxonomyTreeList.EditTaxonomyTreeActionListener.class),
55 @EventConfig(listeners = UITaxonomyTreeList.AddTaxonomyTreeActionListener.class)
56 }
57 )
58
59 public class UITaxonomyTreeList extends UIPagingGridDecorator {
60
61 public static final String[] ACTIONS = { "AddTaxonomyTree" };
62
63 public static final String ST_ADD = "AddTaxonomyTreePopup";
64
65 public static final String ST_EDIT = "EditTaxonomyTreePopup";
66
67 public static final String ACCESS_PERMISSION = "exo:accessPermissions";
68
69 private boolean isTargetInTrash_ = false;
70
71 private static final Log LOG = ExoLogger.getLogger(UITaxonomyTreeList.class.getName());
72
73 public UITaxonomyTreeList() throws Exception {
74 getUIPageIterator().setId("UITaxonomyTreeListIterator");
75 }
76
77
78 public String[] getActions() {
79 return ACTIONS;
80 }
81
82 public List getTaxonomyTreeList() throws Exception {
83 return getUIPageIterator().getCurrentPageData();
84 }
85
86 public void refresh(int currentPage) throws Exception {
87 this.isTargetInTrash_ = false;
88 ListAccess<TaxonomyTreeData> taxonomyTreeList = new ListAccessImpl<TaxonomyTreeData>(TaxonomyTreeData.class,
89 getAllTaxonomyTreeList());
90 LazyPageList<TaxonomyTreeData> dataPageList = new LazyPageList<TaxonomyTreeData>(taxonomyTreeList,
91 getUIPageIterator().getItemsPerPage());
92 getUIPageIterator().setPageList(dataPageList);
93 if (currentPage > getUIPageIterator().getAvailablePage())
94 getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
95 else
96 getUIPageIterator().setCurrentPage(currentPage);
97 }
98
99 public boolean isTargetInTrash() {
100 return isTargetInTrash_;
101 }
102
103 private List<TaxonomyTreeData> getAllTaxonomyTreeList() throws RepositoryException {
104 List<TaxonomyTreeData> lstTaxonomyTreeData = new ArrayList<TaxonomyTreeData>();
105 TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class);
106 List<Node> lstTaxonomyTreeNode = taxonomyService.getAllTaxonomyTrees();
107 if (lstTaxonomyTreeNode != null && lstTaxonomyTreeNode.size() > 0) {
108 for (Node node : lstTaxonomyTreeNode) {
109 lstTaxonomyTreeData.add(setData(node));
110 }
111 }
112 return lstTaxonomyTreeData;
113 }
114
115 private TaxonomyTreeData setData(Node node) {
116 TaxonomyTreeData taxonomyTreeData = null ;
117 TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class);
118 try {
119 if (node != null) {
120 taxonomyTreeData = new TaxonomyTreeData();
121 taxonomyTreeData.setTaxoTreeName(node.getName());
122 if (Utils.isInTrash(node)) {
123 taxonomyTreeData.setEdit(false);
124 this.isTargetInTrash_ = true;
125 } else {
126 taxonomyTreeData.setEdit(true);
127 }
128 taxonomyTreeData.setTaxoTreeHomePath(node.getPath());
129 taxonomyTreeData.setTaxoTreeWorkspace(node.getSession().getWorkspace().getName());
130 Node realTreeNode = taxonomyService.getTaxonomyTree(node.getName(), true);
131 Value[] values = realTreeNode.getProperty("exo:permissions").getValues();
132 StringBuffer buffer = new StringBuffer(1024);
133 try {
134 for (Value permission: values) {
135 buffer.append(permission.getString()).append(';');
136 }
137 } catch (ValueFormatException e) {
138 if (LOG.isWarnEnabled()) {
139 LOG.warn(e.getMessage());
140 }
141 }
142 catch (RepositoryException e) {
143 if (LOG.isWarnEnabled()) {
144 LOG.warn(e.getMessage());
145 }
146 }
147 String permission = buffer.toString();
148 taxonomyTreeData.setTaxoTreePermissions(permission.substring(0, permission.length() - 1));
149 }
150 } catch (RepositoryException e) {
151 if (LOG.isErrorEnabled()) {
152 LOG.error(e.getMessage(), e);
153 }
154
155 }
156 return taxonomyTreeData;
157 }
158
159 public static class DeleteActionListener extends EventListener<UITaxonomyTreeList> {
160 public void execute(Event<UITaxonomyTreeList> event) throws Exception {
161 UITaxonomyTreeList uiTaxonomyTreeList = event.getSource();
162 UITaxonomyManagerTrees uiTaxonomyManagerTrees = uiTaxonomyTreeList.getParent();
163 String taxoTreeName = event.getRequestContext().getRequestParameter(OBJECTID);
164 String repository = uiTaxonomyTreeList.getAncestorOfType(UIECMAdminPortlet.class).getPreferenceRepository();
165 TaxonomyService taxonomyService = uiTaxonomyTreeList.getApplicationComponent(TaxonomyService.class);
166 ActionServiceContainer actionService = uiTaxonomyTreeList.getApplicationComponent(ActionServiceContainer.class);
167 UIApplication uiApp = uiTaxonomyTreeList.getAncestorOfType(UIApplication.class);
168 try {
169
170 Node taxonomyTreeNode = taxonomyService.getTaxonomyTree(taxoTreeName,true);
171 actionService.removeAction(taxonomyTreeNode, repository);
172 taxonomyService.removeTaxonomyTree(taxoTreeName);
173 org.exoplatform.services.cms.impl.Utils.addEditedConfiguredData(taxoTreeName, "TaxonomyTree",
174 "EditedConfiguredTaxonomyTree", true);
175 } catch(RepositoryException e) {
176 uiApp.addMessage(new ApplicationMessage("UITaxonomyTreeList.msg.remove-exception",
177 null, ApplicationMessage.WARNING));
178
179 return;
180 }
181 uiTaxonomyManagerTrees.update();
182 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
183 }
184 }
185
186 public static class AddTaxonomyTreeActionListener extends EventListener<UITaxonomyTreeList> {
187 public void execute(Event<UITaxonomyTreeList> event) throws Exception {
188 UITaxonomyManagerTrees uiTaxonomyManagerTrees = event.getSource().getParent();
189 uiTaxonomyManagerTrees.removeChildById(UITaxonomyTreeList.ST_EDIT);
190 uiTaxonomyManagerTrees.initPopupTreeContainer(UITaxonomyTreeList.ST_ADD);
191 UITaxonomyTreeContainer uiForm = uiTaxonomyManagerTrees.findFirstComponentOfType(UITaxonomyTreeContainer.class);
192 uiForm.refresh();
193 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
194 }
195 }
196
197 public static class EditTaxonomyTreeActionListener extends EventListener<UITaxonomyTreeList> {
198 public void execute(Event<UITaxonomyTreeList> event) throws Exception {
199 UITaxonomyManagerTrees uiTaxonomyManagerTrees = event.getSource().getParent();
200 uiTaxonomyManagerTrees.removeChildById(UITaxonomyTreeList.ST_ADD);
201 uiTaxonomyManagerTrees.initPopupTreeContainer(UITaxonomyTreeList.ST_EDIT);
202 UITaxonomyTreeContainer uiTaxoTreeContainer = uiTaxonomyManagerTrees
203 .findFirstComponentOfType(UITaxonomyTreeContainer.class);
204 String taxoTreeName = event.getRequestContext().getRequestParameter(OBJECTID);
205 String repository = uiTaxonomyManagerTrees.getAncestorOfType(UIECMAdminPortlet.class)
206 .getPreferenceRepository();
207 TaxonomyTreeData taxoTreeData = new TaxonomyTreeData();
208 taxoTreeData.setTaxoTreeName(taxoTreeName);
209 taxoTreeData.setEdit(true);
210 taxoTreeData.setRepository(repository);
211 uiTaxoTreeContainer.setTaxonomyTreeData(taxoTreeData);
212 uiTaxoTreeContainer.refresh();
213 uiTaxoTreeContainer.viewStep(4);
214 event.getRequestContext().addUIComponentToUpdateByAjax(uiTaxonomyManagerTrees);
215 }
216 }
217 }