]> git.argeo.org Git - gpl/argeo-suite.git/blob - publishing/org.argeo.publishing.ui/src/org/argeo/cms/text/WikiPage.java
Improve terms framework.
[gpl/argeo-suite.git] / publishing / org.argeo.publishing.ui / src / org / argeo / cms / text / WikiPage.java
1 package org.argeo.cms.text;
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.ui.CmsEditable;
10 import org.argeo.cms.ui.CmsUiProvider;
11 import org.argeo.cms.ui.util.CmsLink;
12 import org.argeo.cms.ui.util.CmsUiUtils;
13 import org.argeo.cms.ui.viewers.JcrVersionCmsEditable;
14 import org.argeo.cms.ui.widgets.ScrolledPage;
15 import org.argeo.jcr.JcrUtils;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.layout.GridData;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20
21 /** Display the text of the context, and provide an editor if the user can edit. */
22 public class WikiPage implements CmsUiProvider, CmsNames {
23 @Override
24 public Control createUi(Composite parent, Node context)
25 throws RepositoryException {
26 CmsEditable cmsEditable = new JcrVersionCmsEditable(context);
27 if (cmsEditable.canEdit())
28 new TextEditorHeader(cmsEditable, parent, SWT.NONE)
29 .setLayoutData(CmsUiUtils.fillWidth());
30
31 ScrolledPage page = new ScrolledPage(parent, SWT.NONE);
32 page.setLayout(CmsUiUtils.noSpaceGridLayout());
33 GridData textGd = CmsUiUtils.fillAll();
34 page.setLayoutData(textGd);
35
36 if (context.isNodeType(CmsTypes.CMS_TEXT)) {
37 new StandardTextEditor(page, SWT.NONE, context, cmsEditable);
38 } else if (context.isNodeType(NodeType.NT_FOLDER)
39 || context.getPath().equals("/")) {
40 parent.setBackgroundMode(SWT.INHERIT_NONE);
41 if (context.getSession().hasPermission(context.getPath(),
42 Session.ACTION_ADD_NODE)) {
43 Node indexNode = JcrUtils.getOrAdd(context, CMS_INDEX,
44 CmsTypes.CMS_TEXT);
45 new StandardTextEditor(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() + "/",
52 textNode.getPath()).createUi(parent, textNode);
53 }
54 for (NodeIterator ni = context.getNodes(); ni.hasNext();) {
55 Node textNode = ni.nextNode();
56 if (textNode.isNodeType(CmsTypes.CMS_TEXT)
57 && !textNode.getName().equals(CMS_INDEX))
58 new CmsLink(textNode.getName(), textNode.getPath())
59 .createUi(parent, textNode);
60 }
61 }
62 }
63 return page;
64 }
65 }