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
22 import javax.jcr.AccessDeniedException;
23 import javax.jcr.Node;
24 import javax.jcr.RepositoryException;
25 import javax.jcr.Session;
26
27 import org.exoplatform.ecm.webui.form.UIFormInputSetWithAction;
28 import org.exoplatform.ecm.webui.selector.UISelectable;
29 import org.exoplatform.ecm.webui.tree.UINodeTreeBuilder;
30 import org.exoplatform.services.jcr.RepositoryService;
31 import org.exoplatform.services.jcr.core.ManageableRepository;
32 import org.exoplatform.services.log.ExoLogger;
33 import org.exoplatform.services.log.Log;
34 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
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.UIBreadcumbs;
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.EventListener;
43 import org.exoplatform.webui.form.UIForm;
44 import org.exoplatform.webui.form.UIFormInputInfo;
45 import org.exoplatform.webui.form.UIFormSelectBox;
46
47
48
49
50
51
52
53 @ComponentConfig(
54 lifecycle = UIFormLifecycle.class,
55 template = "classpath:groovy/ecm/webui/form/UIFormWithoutAction.gtmpl",
56 events = {
57 @EventConfig(listeners = UIWorkspaceList.ChangeWorkspaceActionListener.class),
58 @EventConfig(listeners = UIWorkspaceList.AddRootNodeActionListener.class)
59 }
60 )
61 public class UIWorkspaceList extends UIForm {
62
63 static private String WORKSPACE_NAME = "workspaceName";
64 static private String ROOT_NODE_INFO = "rootNodeInfo";
65 static private String ROOT_NODE_PATH = "rootNodePath";
66
67 private List<String> wsList_;
68 private boolean isShowSystem_ = true;
69
70 private static final Log LOG = ExoLogger.getLogger(UIWorkspaceList.class.getName());
71
72 public UIWorkspaceList() throws Exception {
73 List<SelectItemOption<String>> wsList = new ArrayList<SelectItemOption<String>>();
74 UIFormSelectBox uiWorkspaceList = new UIFormSelectBox(WORKSPACE_NAME, WORKSPACE_NAME, wsList);
75 uiWorkspaceList.setOnChange("ChangeWorkspace");
76 addUIFormInput(uiWorkspaceList);
77 UIFormInputSetWithAction rootNodeInfo = new UIFormInputSetWithAction(ROOT_NODE_INFO);
78 rootNodeInfo.addUIFormInput(new UIFormInputInfo(ROOT_NODE_PATH, ROOT_NODE_PATH, null));
79 String[] actionInfor = {"AddRootNode"};
80 rootNodeInfo.setActionInfo(ROOT_NODE_PATH, actionInfor);
81 rootNodeInfo.showActionInfo(true);
82 rootNodeInfo.setRendered(false);
83 addUIComponentInput(rootNodeInfo);
84 }
85
86 public void setIsShowSystem(boolean isShowSystem) { isShowSystem_ = isShowSystem; }
87
88 public boolean isShowSystemWorkspace() { return isShowSystem_; }
89
90 public void setShowRootPathSelect(boolean isRender) {
91 UIFormInputSetWithAction uiInputAction = getChildById(ROOT_NODE_INFO);
92 uiInputAction.setRendered(isRender);
93 }
94
95 public void setWorkspaceList() throws Exception {
96 wsList_ = new ArrayList<String>();
97 RepositoryService repositoryService = getApplicationComponent(RepositoryService.class);
98 String[] wsNames = repositoryService.getCurrentRepository().getWorkspaceNames();
99
100 String systemWsName = repositoryService.getCurrentRepository()
101 .getConfiguration()
102 .getSystemWorkspaceName();
103 List<SelectItemOption<String>> workspace = new ArrayList<SelectItemOption<String>>();
104 for (String wsName : wsNames) {
105 Node rootNode = null;
106 try {
107 rootNode = getRootNode(wsName);
108 } catch(AccessDeniedException ex) {
109 continue;
110 } catch(RepositoryException ex) {
111 continue;
112 }
113 if (!isShowSystem_) {
114 if (!wsName.equals(systemWsName)) {
115 workspace.add(new SelectItemOption<String>(wsName, wsName));
116 wsList_.add(wsName);
117 }
118 } else {
119 workspace.add(new SelectItemOption<String>(wsName, wsName));
120 wsList_.add(wsName);
121 }
122 }
123 UIFormSelectBox uiWorkspaceList = getUIFormSelectBox(WORKSPACE_NAME);
124 uiWorkspaceList.setOptions(workspace);
125 UIOneNodePathSelector uiBrowser = getParent();
126 if (uiBrowser.getWorkspaceName() != null) {
127 if (wsList_.contains(uiBrowser.getWorkspaceName())) {
128 uiWorkspaceList.setValue(uiBrowser.getWorkspaceName());
129 }
130 }
131 }
132
133 public void setIsDisable(String wsName, boolean isDisable) {
134 if(wsList_.contains(wsName)) getUIFormSelectBox(WORKSPACE_NAME).setValue(wsName);
135 getUIFormSelectBox(WORKSPACE_NAME).setDisabled(isDisable);
136 }
137
138 private Node getRootNode(String workspaceName) throws RepositoryException {
139 RepositoryService repositoryService = getApplicationComponent(RepositoryService.class);
140 ManageableRepository manageableRepository = repositoryService.getCurrentRepository();
141 return WCMCoreUtils.getUserSessionProvider().getSession(workspaceName, manageableRepository).getRootNode();
142 }
143
144 static public class ChangeWorkspaceActionListener extends EventListener<UIWorkspaceList> {
145 public void execute(Event<UIWorkspaceList> event) throws Exception {
146 UIWorkspaceList uiWorkspaceList = event.getSource();
147 UIOneNodePathSelector uiJBrowser = uiWorkspaceList.getParent();
148 String wsName = uiWorkspaceList.getUIFormSelectBox(WORKSPACE_NAME).getValue();
149 uiJBrowser.setWorkspaceName(wsName);
150 UINodeTreeBuilder uiTreeBuilder = uiJBrowser.getChild(UINodeTreeBuilder.class);
151 UIBreadcumbs uiBreadcumbs = uiJBrowser.getChild(UIBreadcumbs.class);
152 if (uiBreadcumbs != null) uiBreadcumbs.getPath().clear();
153 UIApplication uiApp = uiWorkspaceList.getAncestorOfType(UIApplication.class);
154 try {
155 uiTreeBuilder.setRootTreeNode(uiWorkspaceList.getRootNode(wsName));
156 } catch(Exception e) {
157 if (LOG.isErrorEnabled()) {
158 LOG.error("An unexpected error occurs", e);
159 }
160 return;
161 }
162
163 uiTreeBuilder.buildTree();
164 event.getRequestContext().addUIComponentToUpdateByAjax(uiJBrowser);
165 }
166 }
167
168 static public class AddRootNodeActionListener extends EventListener<UIWorkspaceList> {
169 public void execute(Event<UIWorkspaceList> event) throws Exception {
170 UIWorkspaceList uiWorkspaceList = event.getSource();
171 UIOneNodePathSelector uiJBrowser = uiWorkspaceList.getParent();
172 String returnField = uiJBrowser.getReturnFieldName();
173 String workspaceName = uiJBrowser.getWorkspaceName();
174 RepositoryService repositoryService = uiWorkspaceList.getApplicationComponent(RepositoryService.class);
175 ManageableRepository manageableRepository = repositoryService.getCurrentRepository();
176 Session session = WCMCoreUtils.getSystemSessionProvider().getSession(workspaceName, manageableRepository);
177 String value = session.getRootNode().getPath();
178 if (!uiJBrowser.isDisable()) {
179 StringBuffer sb = new StringBuffer();
180 sb.append(uiJBrowser.getWorkspaceName()).append(":").append(value);
181 value = sb.toString();
182 }
183 ((UISelectable)uiJBrowser.getSourceComponent()).doSelect(returnField, value);
184 }
185 }
186 }