]>
git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java
1 package org
.argeo
.slc
.akb
.ui
.editors
;
4 import javax
.jcr
.Property
;
5 import javax
.jcr
.Repository
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Session
;
9 import org
.argeo
.jcr
.JcrUtils
;
10 import org
.argeo
.slc
.akb
.AkbException
;
11 import org
.argeo
.slc
.akb
.AkbService
;
12 import org
.argeo
.slc
.akb
.AkbTypes
;
13 import org
.argeo
.slc
.akb
.ui
.AkbUiUtils
;
14 import org
.argeo
.slc
.akb
.utils
.AkbJcrUtils
;
15 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
16 import org
.eclipse
.swt
.SWT
;
17 import org
.eclipse
.swt
.layout
.GridData
;
18 import org
.eclipse
.swt
.widgets
.Composite
;
19 import org
.eclipse
.ui
.IEditorInput
;
20 import org
.eclipse
.ui
.IEditorSite
;
21 import org
.eclipse
.ui
.PartInitException
;
22 import org
.eclipse
.ui
.forms
.IManagedForm
;
23 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
24 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
25 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
28 * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session
29 * that is bound to it.
31 public abstract class AbstractAkbNodeEditor
extends FormEditor
{
32 // private final static Log log = LogFactory
33 // .getLog(AbstractEntityEditor.class);
35 // We use a one session per editor pattern to secure various nodes and
37 private Repository repository
;
38 private Session session
;
39 private AkbService akbService
;
43 // a template or an active environment
46 private boolean isTemplate
;
49 private final static int SHORT_NAME_LENGHT
= 10;
51 // to implement methods
52 protected abstract String
getEditorId();
54 protected abstract void populateMainPage(Composite parent
,
55 IManagedForm managedForm
);
57 public void init(IEditorSite site
, IEditorInput input
)
58 throws PartInitException
{
62 session
= repository
.login();
63 AkbNodeEditorInput anei
= (AkbNodeEditorInput
) getEditorInput();
64 akbNode
= session
.getNodeByIdentifier(anei
.getIdentifier());
65 envNode
= session
.getNodeByIdentifier(anei
.getEnvIdentifier());
66 isTemplate
= envNode
.isNodeType(AkbTypes
.AKB_ENV_TEMPLATE
);
67 updatePartNameAndToolTip();
68 } catch (RepositoryException e
) {
69 throw new AkbException("Unable open editor for akb node", e
);
74 * Overwrite to provide a specific part Name and / or tooltip
76 protected void updatePartNameAndToolTip() {
77 String name
= JcrUtils
.get(akbNode
, Property
.JCR_TITLE
);
80 if (AkbJcrUtils
.checkNotEmptyString(name
)) {
81 if (name
.length() > SHORT_NAME_LENGHT
)
82 name
= name
.substring(0, SHORT_NAME_LENGHT
- 1) + "...";
87 if (AkbJcrUtils
.isEmptyString(name
))
88 name
= "current item";
89 setTitleToolTip("Display and edit " + name
);
92 /** Overwrite to provide supplementary pages between main and history page */
93 protected void addOtherPages() throws PartInitException
{
96 /* Pages management */
97 @SuppressWarnings("unused")
99 protected void addPages() {
102 addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
103 // Add AKB Type specific pages
105 // Use this when versioning is implemented
108 addPage(new HistoryPage(this, "historyPage", "History"));
109 } catch (PartInitException e
) {
110 throw new AkbException("Unable to initialise pages for editor "
116 * Display and edit info
118 private class ConnectorAliasPage
extends FormPage
{
120 public ConnectorAliasPage(FormEditor editor
, String id
, String title
) {
121 super(editor
, id
, title
);
124 protected void createFormContent(IManagedForm managedForm
) {
125 super.createFormContent(managedForm
);
126 ScrolledForm form
= managedForm
.getForm();
127 form
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
128 populateMainPage(form
.getBody(), managedForm
);
135 private class HistoryPage
extends FormPage
{
137 public HistoryPage(FormEditor editor
, String id
, String title
) {
138 super(editor
, id
, title
);
141 protected void createFormContent(IManagedForm managedForm
) {
142 super.createFormContent(managedForm
);
143 ScrolledForm form
= managedForm
.getForm();
144 form
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
145 Composite parent
= form
.getBody();
146 parent
.setLayout(AkbUiUtils
.gridLayoutNoBorder());
147 getToolkit().createLabel(parent
,
148 "This page will display history " + "for current AKB Node");
152 /* EXPOSES TO CHILDREN CLASSES */
153 protected Session
getSession() {
157 protected AkbService
getAkbService() {
161 protected Node
getAkbNode() {
165 protected Node
getEnvNode() {
169 protected boolean isTemplate() {
173 /* LIFE CYCLE MANAGEMENT */
175 public void dispose() {
177 // if (cNode != null)
178 // CommonsJcrUtils.cancelAndCheckin(cNode);
182 JcrUtils
.logoutQuietly(session
);
188 public void doSaveAs() {
189 // unused compulsory method
193 public void doSave(IProgressMonitor monitor
) {
195 if (getSession().hasPendingChanges())
196 JcrUtils
.updateLastModified(getAkbNode());
198 updatePartNameAndToolTip();
199 this.firePropertyChange(PROP_DIRTY
);
200 } catch (Exception e
) {
201 throw new AkbException("Error getting session status.", e
);
206 public boolean isDirty() {
208 return session
.hasPendingChanges();
209 } catch (Exception e
) {
210 throw new AkbException("Error getting session status.", e
);
215 public boolean isSaveAsAllowed() {
220 public void setFocus() {
223 /* DEPENDENCY INJECTION */
224 public void setRepository(Repository repository
) {
225 this.repository
= repository
;
228 public void setAkbService(AkbService akbService
) {
229 this.akbService
= akbService
;