1 package org
.argeo
.cms
.e4
.parts
;
3 import java
.util
.Observable
;
4 import java
.util
.Observer
;
6 import javax
.annotation
.PostConstruct
;
7 import javax
.annotation
.PreDestroy
;
8 import javax
.inject
.Inject
;
10 import javax
.jcr
.Repository
;
11 import javax
.jcr
.RepositoryException
;
12 import javax
.jcr
.Session
;
13 import javax
.jcr
.nodetype
.NodeType
;
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
;
26 public class CmsDocBookEditor
implements Observer
{
28 Repository repository
;
34 JcrVersionCmsEditable cmsEditable
;
37 public void createUI(Composite parent
) {
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())
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
);
57 public void dispose() {
58 JcrUtils
.logoutQuietly(session
);
65 } catch (RepositoryException e
) {
66 throw new CmsException("Cannot save", e
);
68 cmsEditable
.stopEditing();
72 public void update(Observable o
, Object arg
) {
73 // CmsEditable cmsEditable = (CmsEditable) o;
74 mpart
.setDirty(isDirty());
78 return cmsEditable
.isEditing();