1 package org
.argeo
.slc
.akb
.ui
.views
;
3 import java
.util
.HashMap
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
11 import org
.argeo
.eclipse
.ui
.utils
.CommandUtils
;
12 import org
.argeo
.jcr
.JcrUtils
;
13 import org
.argeo
.slc
.akb
.AkbException
;
14 import org
.argeo
.slc
.akb
.AkbNames
;
15 import org
.argeo
.slc
.akb
.AkbService
;
16 import org
.argeo
.slc
.akb
.AkbTypes
;
17 import org
.argeo
.slc
.akb
.ui
.AkbUiPlugin
;
18 import org
.argeo
.slc
.akb
.ui
.AkbUiUtils
;
19 import org
.argeo
.slc
.akb
.ui
.commands
.CreateAkbNode
;
20 import org
.argeo
.slc
.akb
.ui
.commands
.DeleteAkbNodes
;
21 import org
.argeo
.slc
.akb
.ui
.commands
.OpenAkbNodeEditor
;
22 import org
.argeo
.slc
.akb
.ui
.providers
.ActiveEnvsTreeContentProvider
;
23 import org
.argeo
.slc
.akb
.ui
.providers
.ActiveTreeItem
;
24 import org
.argeo
.slc
.akb
.ui
.providers
.AkbTreeLabelProvider
;
25 import org
.argeo
.slc
.akb
.ui
.utils
.Refreshable
;
26 import org
.eclipse
.jface
.action
.IMenuListener
;
27 import org
.eclipse
.jface
.action
.IMenuManager
;
28 import org
.eclipse
.jface
.action
.MenuManager
;
29 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
30 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
31 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
32 import org
.eclipse
.jface
.viewers
.TreeViewer
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.layout
.GridData
;
35 import org
.eclipse
.swt
.widgets
.Composite
;
36 import org
.eclipse
.swt
.widgets
.Menu
;
37 import org
.eclipse
.ui
.IWorkbenchWindow
;
38 import org
.eclipse
.ui
.part
.ViewPart
;
40 /** AKB Active environment tree view. */
41 public class EnvironmentsTreeView
extends ViewPart
implements Refreshable
{
43 public final static String ID
= AkbUiPlugin
.PLUGIN_ID
44 + ".environmentsTreeView";
46 /* DEPENDENCY INJECTION */
47 private Session session
;
48 private AkbService akbService
;
51 private TreeViewer envTreeViewer
;
53 // Usefull business objects
54 private Node activeEnvsParentNode
;
56 private void initialize() {
58 activeEnvsParentNode
= session
59 .getNode(AkbNames
.AKB_ENVIRONMENTS_BASE_PATH
);
60 } catch (RepositoryException e
) {
61 throw new AkbException("unable to initialize AKB Browser view", e
);
66 public void createPartControl(Composite parent
) {
68 envTreeViewer
= createTreeViewer(parent
);
69 envTreeViewer
.setInput(activeEnvsParentNode
);
72 // The main tree viewer
73 protected TreeViewer
createTreeViewer(Composite parent
) {
74 parent
.setLayout(AkbUiUtils
.gridLayoutNoBorder());
75 int style
= SWT
.BORDER
| SWT
.MULTI
;
77 TreeViewer viewer
= new TreeViewer(parent
, style
);
78 viewer
.getTree().setLayoutData(
79 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
81 viewer
.setContentProvider(new ActiveEnvsTreeContentProvider());
82 viewer
.setLabelProvider(new AkbTreeLabelProvider());
83 viewer
.addDoubleClickListener(new ViewDoubleClickListener());
85 getSite().setSelectionProvider(viewer
);
88 MenuManager menuManager
= new MenuManager();
89 Menu menu
= menuManager
.createContextMenu(viewer
.getTree());
90 menuManager
.addMenuListener(new IMenuListener() {
91 public void menuAboutToShow(IMenuManager manager
) {
92 contextMenuAboutToShow(manager
);
95 viewer
.getTree().setMenu(menu
);
96 menuManager
.setRemoveAllWhenShown(true);
97 getSite().registerContextMenu(menuManager
, viewer
);
102 // ////////////////////
106 public void forceRefresh(Object object
) {
107 envTreeViewer
.setInput(activeEnvsParentNode
);
111 public void setFocus() {
115 public void dispose() {
116 JcrUtils
.logoutQuietly(session
);
120 // ///////////////////////////
121 // CONTEXT MENU MANAGEMENT
123 * Defines the commands that will pop up in the context menu.
125 protected void contextMenuAboutToShow(IMenuManager menuManager
) {
126 IWorkbenchWindow window
= AkbUiPlugin
.getDefault().getWorkbench()
127 .getActiveWorkbenchWindow();
130 IStructuredSelection selection
= (IStructuredSelection
) envTreeViewer
133 ActiveTreeItem item
= (ActiveTreeItem
) selection
.getFirstElement();
135 boolean hasSelection
= item
!= null;
136 Node selected
= null, currEnv
= null;
139 selected
= item
.getNode();
140 currEnv
= item
.getEnvironment();
142 boolean isEnv
= hasSelection ? selected
143 .isNodeType(AkbTypes
.AKB_ENV
) : false;
144 boolean isDeletable
= hasSelection ? isEnv
: false;
145 Map
<String
, String
> params
= new HashMap
<String
, String
>();
148 params
= new HashMap
<String
, String
>();
150 params
.put(DeleteAkbNodes
.PARAM_NODE_JCR_ID
,
151 selected
.getIdentifier());
152 AkbUiUtils
.refreshParameterizedCommand(menuManager
, window
,
153 "cmd.deleteItem", DeleteAkbNodes
.ID
,
154 "Delete selected active environment", null, isDeletable
,
158 params
= new HashMap
<String
, String
>();
159 params
.put(OpenAkbNodeEditor
.PARAM_NODE_TYPE
, AkbTypes
.AKB_ENV
);
160 AkbUiUtils
.refreshParameterizedCommand(menuManager
, window
,
161 "cmd.instanciateEnv", CreateAkbNode
.ID
,
162 "Create new environment instance", null, !hasSelection
165 } catch (RepositoryException re
) {
166 throw new AkbException("Error while refreshing context menu", re
);
171 class ViewDoubleClickListener
implements IDoubleClickListener
{
172 public void doubleClick(DoubleClickEvent evt
) {
173 Object obj
= ((IStructuredSelection
) evt
.getSelection())
176 if (obj
instanceof ActiveTreeItem
) {
177 ActiveTreeItem currItem
= (ActiveTreeItem
) obj
;
178 Node node
= currItem
.getNode();
179 Node currEnv
= currItem
.getEnvironment();
180 Map
<String
, String
> params
= new HashMap
<String
, String
>();
181 params
.put(OpenAkbNodeEditor
.PARAM_NODE_JCR_ID
,
182 node
.getIdentifier());
183 params
.put(OpenAkbNodeEditor
.PARAM_CURR_ENV_JCR_ID
,
184 currEnv
.getIdentifier());
185 CommandUtils
.callCommand(OpenAkbNodeEditor
.ID
, params
);
187 } catch (RepositoryException e
) {
188 throw new AkbException("Cannot open " + obj
, e
);
193 /* DEPENDENCY INJECTION */
194 public void setRepository(Repository repository
) {
196 session
= repository
.login();
197 } catch (RepositoryException e
) {
198 throw new AkbException("unable to log in for " + ID
+ " view");
202 public void setAkbService(AkbService akbService
) {
203 this.akbService
= akbService
;