1 package org
.argeo
.slc
.akb
.ui
.editors
;
3 import java
.util
.HashMap
;
7 import javax
.jcr
.ItemNotFoundException
;
9 import javax
.jcr
.NodeIterator
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.Session
;
12 import javax
.jcr
.observation
.Event
;
13 import javax
.jcr
.observation
.ObservationManager
;
15 import org
.argeo
.eclipse
.ui
.jcr
.AsyncUiEventListener
;
16 import org
.argeo
.eclipse
.ui
.utils
.CommandUtils
;
17 import org
.argeo
.slc
.akb
.AkbException
;
18 import org
.argeo
.slc
.akb
.AkbNames
;
19 import org
.argeo
.slc
.akb
.AkbTypes
;
20 import org
.argeo
.slc
.akb
.ui
.AkbUiPlugin
;
21 import org
.argeo
.slc
.akb
.ui
.AkbUiUtils
;
22 import org
.argeo
.slc
.akb
.ui
.commands
.ForceRefresh
;
23 import org
.argeo
.slc
.akb
.ui
.commands
.OpenAkbNodeEditor
;
24 import org
.argeo
.slc
.akb
.ui
.composites
.AliasListItemComposite
;
25 import org
.argeo
.slc
.akb
.ui
.composites
.MixTitleComposite
;
26 import org
.argeo
.slc
.akb
.utils
.AkbJcrUtils
;
27 import org
.eclipse
.jface
.action
.IContributionItem
;
28 import org
.eclipse
.jface
.action
.IMenuListener
;
29 import org
.eclipse
.jface
.action
.IMenuManager
;
30 import org
.eclipse
.jface
.action
.MenuManager
;
31 import org
.eclipse
.swt
.SWT
;
32 import org
.eclipse
.swt
.layout
.GridData
;
33 import org
.eclipse
.swt
.layout
.GridLayout
;
34 import org
.eclipse
.swt
.widgets
.Composite
;
35 import org
.eclipse
.swt
.widgets
.Display
;
36 import org
.eclipse
.swt
.widgets
.Group
;
37 import org
.eclipse
.swt
.widgets
.Menu
;
38 import org
.eclipse
.ui
.IWorkbenchWindow
;
39 import org
.eclipse
.ui
.forms
.AbstractFormPart
;
40 import org
.eclipse
.ui
.forms
.IFormPart
;
41 import org
.eclipse
.ui
.forms
.IManagedForm
;
44 * Display and edit an environment template
46 public class EnvTemplateEditor
extends AbstractAkbNodeEditor
{
48 public final static String ID
= AkbUiPlugin
.PLUGIN_ID
49 + ".envTemplateEditor";
52 private final static String
[] observedNodes
= { AkbTypes
.AKB_CONNECTOR_FOLDER
};
53 private ConnectorObserver connectorObserver
;
55 /* CONTENT CREATION */
57 public void populateMainPage(Composite parent
, IManagedForm managedForm
) {
58 parent
.setLayout(new GridLayout());
59 // First line main info
60 MixTitleComposite mixTitleCmp
= new MixTitleComposite(parent
,
61 SWT
.NO_FOCUS
, getToolkit(), managedForm
, getAkbNode());
62 GridData gd
= new GridData(SWT
.FILL
, SWT
.TOP
, true, false);
64 mixTitleCmp
.setLayoutData(gd
);
66 // Second line : the defined editor
67 Group group
= new Group(parent
, SWT
.NONE
);
68 group
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
69 getToolkit().adapt(group
, false, false);
70 String groupTitle
= "Connector Aliases";
71 group
.setText(groupTitle
);
72 populateDisplayConnectorPanel(managedForm
, group
, getAkbNode());
75 MenuManager menuManager
= new MenuManager();
76 Menu menu
= menuManager
.createContextMenu(group
);
77 menuManager
.addMenuListener(new IMenuListener() {
78 public void menuAboutToShow(IMenuManager manager
) {
83 menuManager
.setRemoveAllWhenShown(true);
86 protected void aboutToShow(IMenuManager menu
) {
89 IWorkbenchWindow window
= AkbUiPlugin
.getDefault().getWorkbench()
90 .getActiveWorkbenchWindow();
91 Node connectorParent
= getAkbNode();
94 CommandUtils
.refreshCommand(menu
, window
, ForceRefresh
.ID
,
95 "Refresh", null, true);
97 String submenuID
= "subMenu.addAlias";
98 IContributionItem ici
= menu
.find(submenuID
);
101 Map
<String
, String
> params
= new HashMap
<String
, String
>();
102 params
.put(OpenAkbNodeEditor
.PARAM_PARENT_NODE_JCR_ID
,
103 connectorParent
.getIdentifier());
104 params
.put(OpenAkbNodeEditor
.PARAM_NODE_TYPE
,
105 AkbTypes
.AKB_CONNECTOR_ALIAS
);
107 MenuManager subMenu
= new MenuManager("Add connector alias",
110 Map
<String
, String
> tmpParams
= new HashMap
<String
, String
>();
111 tmpParams
.putAll(params
);
112 tmpParams
.put(OpenAkbNodeEditor
.PARAM_NODE_SUBTYPE
,
113 AkbTypes
.AKB_JDBC_CONNECTOR
);
114 String currItemId
= "cmd.createJDBCAlias";
115 IContributionItem currItem
= subMenu
.find(currItemId
);
116 if (currItem
!= null)
117 subMenu
.remove(currItem
);
118 subMenu
.add(AkbUiUtils
.createContributionItem(subMenu
, window
,
119 currItemId
, OpenAkbNodeEditor
.ID
, "JDBC", null, tmpParams
));
122 tmpParams
= new HashMap
<String
, String
>();
123 tmpParams
.putAll(params
);
124 tmpParams
.put(OpenAkbNodeEditor
.PARAM_NODE_SUBTYPE
,
125 AkbTypes
.AKB_SSH_CONNECTOR
);
126 currItemId
= "cmd.createSSHAlias";
127 currItem
= subMenu
.find(currItemId
);
128 if (currItem
!= null)
129 subMenu
.remove(currItem
);
130 subMenu
.add(AkbUiUtils
.createContributionItem(subMenu
, window
,
131 currItemId
, OpenAkbNodeEditor
.ID
, "SSH", null, tmpParams
));
136 } catch (RepositoryException e
) {
137 throw new AkbException("Unable to refresh context menu", e
);
141 /** Manage display and update of defined connector aliases */
142 public void populateDisplayConnectorPanel(final IManagedForm managedForm
,
143 final Composite panel
, final Node entity
) {
144 GridLayout gl
= AkbUiUtils
.gridLayoutNoBorder();
148 final Map
<String
, Composite
> connectorsCmps
= new HashMap
<String
, Composite
>();
149 AbstractFormPart formPart
= new AbstractFormPart() {
150 public void refresh() {
153 // first: initialise composite for new connectors
155 Node connectorPar
= getAkbNode().getNode(
156 AkbTypes
.AKB_CONNECTOR_FOLDER
);
157 NodeIterator ni
= connectorPar
.getNodes();
159 boolean isTemplate
= getEnvNode().isNodeType(
160 AkbTypes
.AKB_ENV_TEMPLATE
);
162 aliases
: while (ni
.hasNext()) {
163 Node currNode
= ni
.nextNode();
164 String currJcrId
= currNode
.getIdentifier();
165 if (!connectorsCmps
.containsKey(currJcrId
)) {
168 currCmp
= new AliasListItemComposite(panel
,
169 SWT
.NO_FOCUS
, getToolkit(),
170 managedForm
, getAkbNode(),
171 currNode
.getPath(), getAkbService());
173 String aliasPath
= AkbJcrUtils
.get(currNode
,
174 AkbNames
.AKB_CONNECTOR_ALIAS_PATH
);
175 if (AkbJcrUtils
.isEmptyString(aliasPath
)
176 || !getSession().nodeExists(aliasPath
))
179 currCmp
= new AliasListItemComposite(panel
,
180 SWT
.NO_FOCUS
, getToolkit(),
181 managedForm
, getAkbNode(), aliasPath
,
184 currCmp
.setLayoutData(new GridData(SWT
.FILL
,
185 SWT
.TOP
, true, false));
186 connectorsCmps
.put(currJcrId
, currCmp
);
191 // then remove necessary composites
192 Session session
= connectorPar
.getSession();
193 for (String jcrId
: connectorsCmps
.keySet()) {
194 // TODO: enhance this
195 Composite currCmp
= connectorsCmps
.get(jcrId
);
197 session
.getNodeByIdentifier(jcrId
);
198 } catch (ItemNotFoundException infe
) {
203 } catch (RepositoryException e
) {
204 throw new AkbException("Cannot refresh connectors group", e
);
209 managedForm
.addPart(formPart
);
211 // Initialize observer
213 ObservationManager observationManager
= getSession().getWorkspace()
214 .getObservationManager();
215 connectorObserver
= new ConnectorObserver(panel
.getDisplay(),
217 // observe tree changes under All results
218 observationManager
.addEventListener(connectorObserver
,
219 Event
.NODE_ADDED
| Event
.NODE_REMOVED
, getAkbNode()
220 .getNode(AkbTypes
.AKB_CONNECTOR_FOLDER
).getPath(),
221 true, null, observedNodes
, false);
222 } catch (RepositoryException e
) {
223 throw new AkbException("Cannot register listeners", e
);
228 class ConnectorObserver
extends AsyncUiEventListener
{
230 private IManagedForm managedForm
;
232 public ConnectorObserver(Display display
, IManagedForm managedForm
) {
234 this.managedForm
= managedForm
;
238 protected Boolean
willProcessInUiThread(List
<Event
> events
)
239 throws RepositoryException
{
243 protected void onEventInUiThread(List
<Event
> events
)
244 throws RepositoryException
{
246 for (IFormPart part
: managedForm
.getParts())
248 } catch (Exception e
) {
256 protected String
getEditorId() {