]> 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
ba2963e638f98ce9ec406008a7f4dcfe3b61499f
[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.Repository;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Session;
7
8 import org.argeo.jcr.JcrUtils;
9 import org.argeo.slc.akb.AkbException;
10 import org.argeo.slc.akb.ui.AkbUiPlugin;
11 import org.eclipse.core.runtime.IProgressMonitor;
12 import org.eclipse.swt.widgets.Composite;
13 import org.eclipse.ui.IEditorInput;
14 import org.eclipse.ui.IEditorSite;
15 import org.eclipse.ui.PartInitException;
16 import org.eclipse.ui.part.EditorPart;
17
18 /**
19 * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session that
20 * is bound to it.
21 */
22 public abstract class AbstractAkbNodeEditor extends EditorPart {
23 // private final static Log log = LogFactory
24 // .getLog(AbstractEntityEditor.class);
25
26 // We use a one session per editor pattern to secure various nodes and
27 // changes life cycle
28 private Repository repository;
29 private Session session;
30
31 // Business Objects
32 private Node akbNode;
33
34 // LIFE CYCLE
35 public void init(IEditorSite site, IEditorInput input)
36 throws PartInitException {
37 setSite(site);
38 setInput(input);
39 try {
40 session = repository.login();
41 AkbNodeEditorInput anei = (AkbNodeEditorInput) getEditorInput();
42 akbNode = session.getNodeByIdentifier(anei.getIdentifier());
43
44 // try to set a default part name
45 updatePartName();
46
47 // update tooltip
48 // String displayName = CommonsJcrUtils.get(getEntity(),
49 // Property.JCR_TITLE);
50
51 // if (CommonsJcrUtils.isEmptyString(displayName))
52 // displayName = "current item";
53 // setTitleToolTip("Display and edit information for " +
54 // displayName);
55 } catch (RepositoryException e) {
56 throw new AkbException("Unable open editor for akb node", e);
57 }
58 }
59
60 /**
61 * Overwrite to provide a specific part Name
62 */
63 protected void updatePartName() {
64 // String name = CommonsJcrUtils.get(entity, Property.JCR_TITLE);
65 // if (CommonsJcrUtils.checkNotEmptyString(name)) {
66 // if (name.length() > SHORT_NAME_LENGHT)
67 // name = name.substring(0, SHORT_NAME_LENGHT - 1) + "...";
68 // setPartName(name);
69 // }
70 }
71
72 /* EXPOSES TO CHILDREN CLASSES */
73 protected Session getSession() {
74 return session;
75 }
76
77 @Override
78 public void dispose() {
79 try {
80 // if (cNode != null)
81 // CommonsJcrUtils.cancelAndCheckin(cNode);
82 }
83
84 finally {
85 JcrUtils.logoutQuietly(session);
86 }
87 super.dispose();
88 }
89
90 @Override
91 public void doSaveAs() {
92 // unused compulsory method
93 }
94
95 @Override
96 public void doSave(IProgressMonitor monitor) {
97 throw new AkbException("Implement this");
98 }
99
100 @Override
101 public boolean isDirty() {
102 try {
103 return session.hasPendingChanges();
104 } catch (Exception e) {
105 throw new AkbException("Error getting session status.", e);
106 }
107 }
108
109 @Override
110 public boolean isSaveAsAllowed() {
111 return false;
112 }
113
114 @Override
115 public void setFocus() {
116 }
117
118 /* DEPENDENCY INJECTION */
119 public void setRepository(Repository repository) {
120 this.repository = repository;
121 }
122 }