]>
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
.ui
.AkbUiUtils
;
13 import org
.argeo
.slc
.akb
.utils
.AkbJcrUtils
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.swt
.SWT
;
16 import org
.eclipse
.swt
.layout
.GridData
;
17 import org
.eclipse
.swt
.widgets
.Composite
;
18 import org
.eclipse
.ui
.IEditorInput
;
19 import org
.eclipse
.ui
.IEditorSite
;
20 import org
.eclipse
.ui
.PartInitException
;
21 import org
.eclipse
.ui
.forms
.IManagedForm
;
22 import org
.eclipse
.ui
.forms
.editor
.FormEditor
;
23 import org
.eclipse
.ui
.forms
.editor
.FormPage
;
24 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
27 * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session
28 * that is bound to it.
30 public abstract class AbstractAkbNodeEditor
extends FormEditor
{
31 // private final static Log log = LogFactory
32 // .getLog(AbstractEntityEditor.class);
34 // We use a one session per editor pattern to secure various nodes and
36 private Repository repository
;
37 private Session session
;
38 private AkbService akbService
;
44 private final static int SHORT_NAME_LENGHT
= 10;
46 // to implement methods
47 protected abstract String
getEditorId();
49 protected abstract void populateMainPage(Composite parent
,
50 IManagedForm managedForm
);
52 public void init(IEditorSite site
, IEditorInput input
)
53 throws PartInitException
{
57 session
= repository
.login();
58 AkbNodeEditorInput anei
= (AkbNodeEditorInput
) getEditorInput();
59 akbNode
= session
.getNodeByIdentifier(anei
.getIdentifier());
60 updatePartNameAndToolTip();
61 } catch (RepositoryException e
) {
62 throw new AkbException("Unable open editor for akb node", e
);
67 * Overwrite to provide a specific part Name and / or tooltip
69 protected void updatePartNameAndToolTip() {
70 String name
= JcrUtils
.get(akbNode
, Property
.JCR_TITLE
);
73 if (AkbJcrUtils
.checkNotEmptyString(name
)) {
74 if (name
.length() > SHORT_NAME_LENGHT
)
75 name
= name
.substring(0, SHORT_NAME_LENGHT
- 1) + "...";
80 if (AkbJcrUtils
.isEmptyString(name
))
81 name
= "current item";
82 setTitleToolTip("Display and edit " + name
);
85 /** Overwrite to provide supplementary pages between main and history page */
86 protected void addOtherPages() throws PartInitException
{
89 /* Pages management */
91 protected void addPages() {
93 addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
94 // Add AKB Type specific pages
96 addPage(new HistoryPage(this, "historyPage", "History"));
97 } catch (PartInitException e
) {
98 throw new AkbException("Unable to initialise pages for editor "
104 * Display and edit info
106 private class ConnectorAliasPage
extends FormPage
{
108 public ConnectorAliasPage(FormEditor editor
, String id
, String title
) {
109 super(editor
, id
, title
);
112 protected void createFormContent(IManagedForm managedForm
) {
113 super.createFormContent(managedForm
);
114 ScrolledForm form
= managedForm
.getForm();
115 form
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
116 populateMainPage(form
.getBody(), managedForm
);
123 private class HistoryPage
extends FormPage
{
125 public HistoryPage(FormEditor editor
, String id
, String title
) {
126 super(editor
, id
, title
);
129 protected void createFormContent(IManagedForm managedForm
) {
130 super.createFormContent(managedForm
);
131 ScrolledForm form
= managedForm
.getForm();
132 form
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
133 Composite parent
= form
.getBody();
134 parent
.setLayout(AkbUiUtils
.gridLayoutNoBorder());
135 getToolkit().createLabel(parent
,
136 "This page will display history " + "for current AKB Node");
140 /* EXPOSES TO CHILDREN CLASSES */
141 protected Session
getSession() {
145 protected AkbService
getAkbService() {
149 protected Node
getAkbNode() {
153 /* LIFE CYCLE MANAGEMENT */
155 public void dispose() {
157 // if (cNode != null)
158 // CommonsJcrUtils.cancelAndCheckin(cNode);
162 JcrUtils
.logoutQuietly(session
);
168 public void doSaveAs() {
169 // unused compulsory method
173 public void doSave(IProgressMonitor monitor
) {
175 if (getSession().hasPendingChanges())
176 JcrUtils
.updateLastModified(getAkbNode());
178 updatePartNameAndToolTip();
179 this.firePropertyChange(PROP_DIRTY
);
180 } catch (Exception e
) {
181 throw new AkbException("Error getting session status.", e
);
186 public boolean isDirty() {
188 return session
.hasPendingChanges();
189 } catch (Exception e
) {
190 throw new AkbException("Error getting session status.", e
);
195 public boolean isSaveAsAllowed() {
200 public void setFocus() {
203 /* DEPENDENCY INJECTION */
204 public void setRepository(Repository repository
) {
205 this.repository
= repository
;
208 public void setAkbService(AkbService akbService
) {
209 this.akbService
= akbService
;