]> 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
Add AKB icons
[gpl/argeo-slc.git] / 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;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.Repository;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8
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;
25
26 /**
27 * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session
28 * that is bound to it.
29 */
30 public abstract class AbstractAkbNodeEditor extends FormEditor {
31 // private final static Log log = LogFactory
32 // .getLog(AbstractEntityEditor.class);
33
34 // We use a one session per editor pattern to secure various nodes and
35 // changes life cycle
36 private Repository repository;
37 private Session session;
38 private AkbService akbService;
39
40 // Business Objects
41 private Node akbNode;
42
43 // Some constants
44 private final static int SHORT_NAME_LENGHT = 10;
45
46 // to implement methods
47 protected abstract String getEditorId();
48
49 protected abstract void populateMainPage(Composite parent,
50 IManagedForm managedForm);
51
52 public void init(IEditorSite site, IEditorInput input)
53 throws PartInitException {
54 setSite(site);
55 setInput(input);
56 try {
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);
63 }
64 }
65
66 /**
67 * Overwrite to provide a specific part Name and / or tooltip
68 */
69 protected void updatePartNameAndToolTip() {
70 String name = JcrUtils.get(akbNode, Property.JCR_TITLE);
71
72 // Name
73 if (AkbJcrUtils.checkNotEmptyString(name)) {
74 if (name.length() > SHORT_NAME_LENGHT)
75 name = name.substring(0, SHORT_NAME_LENGHT - 1) + "...";
76 setPartName(name);
77 }
78
79 // Tooltip
80 if (AkbJcrUtils.isEmptyString(name))
81 name = "current item";
82 setTitleToolTip("Display and edit " + name);
83 }
84
85 /** Overwrite to provide supplementary pages between main and history page */
86 protected void addOtherPages() throws PartInitException {
87 }
88
89 /* Pages management */
90 @Override
91 protected void addPages() {
92 try {
93 addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
94 // Add AKB Type specific pages
95 addOtherPages();
96 addPage(new HistoryPage(this, "historyPage", "History"));
97 } catch (PartInitException e) {
98 throw new AkbException("Unable to initialise pages for editor "
99 + getEditorId(), e);
100 }
101 }
102
103 /**
104 * Display and edit info
105 */
106 private class ConnectorAliasPage extends FormPage {
107
108 public ConnectorAliasPage(FormEditor editor, String id, String title) {
109 super(editor, id, title);
110 }
111
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);
117 }
118 }
119
120 /**
121 * Display history
122 */
123 private class HistoryPage extends FormPage {
124
125 public HistoryPage(FormEditor editor, String id, String title) {
126 super(editor, id, title);
127 }
128
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");
137 }
138 }
139
140 /* EXPOSES TO CHILDREN CLASSES */
141 protected Session getSession() {
142 return session;
143 }
144
145 protected AkbService getAkbService() {
146 return akbService;
147 }
148
149 protected Node getAkbNode() {
150 return akbNode;
151 }
152
153 /* LIFE CYCLE MANAGEMENT */
154 @Override
155 public void dispose() {
156 try {
157 // if (cNode != null)
158 // CommonsJcrUtils.cancelAndCheckin(cNode);
159 }
160
161 finally {
162 JcrUtils.logoutQuietly(session);
163 }
164 super.dispose();
165 }
166
167 @Override
168 public void doSaveAs() {
169 // unused compulsory method
170 }
171
172 @Override
173 public void doSave(IProgressMonitor monitor) {
174 try {
175 if (getSession().hasPendingChanges())
176 JcrUtils.updateLastModified(getAkbNode());
177 getSession().save();
178 updatePartNameAndToolTip();
179 this.firePropertyChange(PROP_DIRTY);
180 } catch (Exception e) {
181 throw new AkbException("Error getting session status.", e);
182 }
183 }
184
185 @Override
186 public boolean isDirty() {
187 try {
188 return session.hasPendingChanges();
189 } catch (Exception e) {
190 throw new AkbException("Error getting session status.", e);
191 }
192 }
193
194 @Override
195 public boolean isSaveAsAllowed() {
196 return false;
197 }
198
199 @Override
200 public void setFocus() {
201 }
202
203 /* DEPENDENCY INJECTION */
204 public void setRepository(Repository repository) {
205 this.repository = repository;
206 }
207
208 public void setAkbService(AkbService akbService) {
209 this.akbService = akbService;
210 }
211 }