View Javadoc
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   * Display the text of the context, and provide an editor if the user can edit.
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  }