]> git.argeo.org Git - lgpl/argeo-commons.git/blob - CmsDocBookEditor.java
b39feab14ae0426201a67983fec87178708e806d
[lgpl/argeo-commons.git] / CmsDocBookEditor.java
1 package org.argeo.cms.e4.parts;
2
3 import java.util.Observable;
4 import java.util.Observer;
5
6 import javax.annotation.PostConstruct;
7 import javax.annotation.PreDestroy;
8 import javax.inject.Inject;
9 import javax.jcr.Node;
10 import javax.jcr.Repository;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.Session;
13 import javax.jcr.nodetype.NodeType;
14
15 import org.argeo.cms.CmsException;
16 import org.argeo.cms.text.DocumentTextEditor;
17 import org.argeo.cms.viewers.JcrVersionCmsEditable;
18 import org.argeo.jcr.JcrUtils;
19 import org.argeo.jcr.docbook.DocBookTypes;
20 import org.eclipse.e4.ui.di.Persist;
21 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25
26 public class CmsDocBookEditor implements Observer {
27 @Inject
28 Repository repository;
29
30 @Inject
31 private MPart mpart;
32
33 Session session;
34 JcrVersionCmsEditable cmsEditable;
35
36 @PostConstruct
37 public void createUI(Composite parent) {
38 try {
39 parent.setLayout(new GridLayout());
40 session = repository.login();
41 JcrUtils.loginOrCreateWorkspace(repository, "demo");
42 Node textNode = JcrUtils.getOrAdd(session.getRootNode(), "article", DocBookTypes.ARTICLE);
43 if (textNode.isCheckedOut())
44 textNode.addMixin(NodeType.MIX_TITLE);
45 cmsEditable = new JcrVersionCmsEditable(textNode);
46 if (session.hasPendingChanges())
47 session.save();
48 cmsEditable.addObserver(this);
49 DocumentTextEditor textEditor = new DocumentTextEditor(parent, SWT.NONE, textNode, cmsEditable);
50 mpart.setDirty(isDirty());
51 } catch (RepositoryException e) {
52 throw new CmsException("Cannot create text editor", e);
53 }
54 }
55
56 @PreDestroy
57 public void dispose() {
58 JcrUtils.logoutQuietly(session);
59 }
60
61 @Persist
62 public void save() {
63 try {
64 session.save();
65 } catch (RepositoryException e) {
66 throw new CmsException("Cannot save", e);
67 }
68 cmsEditable.stopEditing();
69 }
70
71 @Override
72 public void update(Observable o, Object arg) {
73 // CmsEditable cmsEditable = (CmsEditable) o;
74 mpart.setDirty(isDirty());
75 }
76
77 boolean isDirty() {
78 return cmsEditable.isEditing();
79 }
80
81 }