]> git.argeo.org Git - lgpl/argeo-commons.git/blob - CmsTextEditor.java
4021ead6c4c876708932dfa6237e2aad9bb8b46b
[lgpl/argeo-commons.git] / CmsTextEditor.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
14 import org.argeo.cms.CmsException;
15 import org.argeo.cms.CmsTypes;
16 import org.argeo.cms.text.StandardTextEditor;
17 import org.argeo.cms.viewers.JcrVersionCmsEditable;
18 import org.argeo.jcr.JcrUtils;
19 import org.eclipse.e4.ui.di.Persist;
20 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Composite;
24
25 public class CmsTextEditor implements Observer {
26 @Inject
27 Repository repository;
28
29 @Inject
30 private MPart mpart;
31
32 Session session;
33 JcrVersionCmsEditable cmsEditable;
34
35 @PostConstruct
36 public void createUI(Composite parent) {
37 try {
38 parent.setLayout(new GridLayout());
39 session = repository.login();
40 JcrUtils.loginOrCreateWorkspace(repository, "demo");
41 Node textNode = JcrUtils.getOrAdd(session.getRootNode(), "text", CmsTypes.CMS_TEXT);
42 cmsEditable = new JcrVersionCmsEditable(textNode);
43 if (session.hasPendingChanges())
44 session.save();
45 cmsEditable.addObserver(this);
46 StandardTextEditor textEditor = new StandardTextEditor(parent, SWT.NONE, textNode, cmsEditable);
47 mpart.setDirty(cmsEditable.isEditing());
48 } catch (RepositoryException e) {
49 throw new CmsException("Cannot create text editor", e);
50 }
51 }
52
53 @PreDestroy
54 public void dispose() {
55 JcrUtils.logoutQuietly(session);
56 }
57
58 @Persist
59 public void save() {
60 cmsEditable.stopEditing();
61 }
62
63 @Override
64 public void update(Observable o, Object arg) {
65 // CmsEditable cmsEditable = (CmsEditable) o;
66 mpart.setDirty(isDirty());
67 }
68
69 boolean isDirty() {
70 return cmsEditable.isEditing();
71 }
72
73 }