1 package org.argeo.connect.ui.widgets;
2
3 import javax.jcr.Node;
4 import javax.jcr.NodeIterator;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Session;
7 import javax.jcr.nodetype.NodeType;
8
9 import org.argeo.cms.CmsNames;
10 import org.argeo.cms.text.TextEditorHeader;
11 import org.argeo.cms.ui.CmsEditable;
12 import org.argeo.cms.ui.CmsUiProvider;
13 import org.argeo.cms.util.CmsLink;
14 import org.argeo.cms.util.CmsUtils;
15 import org.argeo.cms.viewers.JcrVersionCmsEditable;
16 import org.argeo.cms.widgets.ScrolledPage;
17 import org.argeo.docbook.jcr.DocBookTypes;
18 import org.argeo.jcr.JcrUtils;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.layout.GridData;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Control;
23
24
25
26
27 public class DocumentPage implements CmsUiProvider {
28 @Override
29 public Control createUi(Composite parent, Node context) throws RepositoryException {
30 CmsEditable cmsEditable = new JcrVersionCmsEditable(context);
31 if (cmsEditable.canEdit())
32 new TextEditorHeader(cmsEditable, parent, SWT.NONE).setLayoutData(CmsUtils.fillWidth());
33
34 ScrolledPage page = new ScrolledPage(parent, SWT.NONE);
35 page.setLayout(CmsUtils.noSpaceGridLayout());
36 GridData textGd = CmsUtils.fillAll();
37 page.setLayoutData(textGd);
38
39 if (context.isNodeType(DocBookTypes.ARTICLE)) {
40 new DocumentTextEditor(page, SWT.NONE, context, cmsEditable);
41 } else {
42 parent.setBackgroundMode(SWT.INHERIT_NONE);
43 if (context.getSession().hasPermission(context.getPath(), Session.ACTION_ADD_NODE)) {
44 Node indexNode = JcrUtils.getOrAdd(context, CmsNames.CMS_INDEX, DocBookTypes.ARTICLE);
45 new DocumentTextEditor(page, SWT.NONE, indexNode, cmsEditable);
46 textGd.heightHint = 400;
47
48 for (NodeIterator ni = context.getNodes(); ni.hasNext();) {
49 Node textNode = ni.nextNode();
50 if (textNode.isNodeType(NodeType.NT_FOLDER))
51 new CmsLink(textNode.getName() + "/", textNode.getPath()).createUi(parent, textNode);
52 }
53 for (NodeIterator ni = context.getNodes(); ni.hasNext();) {
54 Node textNode = ni.nextNode();
55 if (textNode.isNodeType(DocBookTypes.ARTICLE) && !textNode.getName().equals(CmsNames.CMS_INDEX))
56 new CmsLink(textNode.getName(), textNode.getPath()).createUi(parent, textNode);
57 }
58 }
59 }
60 return page;
61 }
62 }