Introduce content layer and document type. github/master
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 11 May 2021 04:27:51 +0000 (06:27 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 11 May 2021 04:27:51 +0000 (06:27 +0200)
core/org.argeo.entity.api/src/org/argeo/entity/EntityType.java
core/org.argeo.entity.api/src/org/argeo/entity/entity.cnd
library/org.argeo.library.ui/config/contentLayer.properties
library/org.argeo.library.ui/src/org/argeo/library/ui/ContentEntryArea.java
publishing/org.argeo.publishing.ui/OSGI-INF/documentUiProvider.xml [new file with mode: 0644]
publishing/org.argeo.publishing.ui/bnd.bnd
publishing/org.argeo.publishing.ui/build.properties
publishing/org.argeo.publishing.ui/config/documentUiProvider.properties [new file with mode: 0644]
publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/DocumentUiProvider.java [new file with mode: 0644]

index 84fa16fdf3a9c453a9a0b9b1415c204642b09e43..089cdcf5aff08d1fcb854a77d11b3eca4d838682 100644 (file)
@@ -5,7 +5,7 @@ public enum EntityType implements JcrName {
        // entity
        entity, local, relatedTo,
        // structure
-       space,
+       space, document,
        // typology
        typologies, terms, term,
        // form
index cd3f327fde8a0331176665190b489827ec092cb8..151df4e76a44f950f4ae38ea83d0812f5f2f6240 100644 (file)
@@ -41,6 +41,9 @@ mixin
 [entity:space]
 mixin
 
+[entity:document]
+mixin
+
 //
 // TYPOLOGY
 //
index ad7b10e014b2b545ea3e4666c58059e0dc8268a8..0f07715bd2557851b16d487a1f6356969938d48d 100644 (file)
@@ -3,4 +3,4 @@ service.pid=argeo.library.ui.contentLayer
 title=%content
 icon=documents
 
-entity.type=nt:folder,entity:space
+entity.type=nt:folder,entity:space,entity:document
index 4c8b041c949a1f558b435a843e19fe737a4b4961..8b884ebcf7a4a95cfa05b36166f571855ad44da0 100644 (file)
@@ -10,35 +10,102 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.query.Query;
 
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.CmsView;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.argeo.entity.EntityType;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
+import org.argeo.suite.ui.SuiteEvent;
+import org.argeo.suite.ui.SuiteIcon;
 import org.argeo.suite.ui.widgets.TreeOrSearchArea;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewerColumn;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 
 public class ContentEntryArea implements CmsUiProvider {
 
        @Override
        public Control createUi(Composite parent, Node context) throws RepositoryException {
+               CmsTheme theme = CmsTheme.getCmsTheme(parent);
+
                parent.setLayout(new GridLayout());
                Ui ui = new Ui(parent, SWT.NONE);
                ui.setLayoutData(CmsUiUtils.fillAll());
 
+               TreeViewerColumn nameCol = new TreeViewerColumn(ui.getTreeViewer(), SWT.NONE);
+               nameCol.getColumn().setWidth(400);
+               nameCol.setLabelProvider(new ColumnLabelProvider() {
+
+                       @Override
+                       public String getText(Object element) {
+                               Node node = (Node) element;
+                               return Jcr.getTitle(node);
+                       }
+
+                       @Override
+                       public Image getImage(Object element) {
+                               Node node = (Node) element;
+                               Image icon;
+                               if (Jcr.isNodeType(node, NodeType.NT_FOLDER)) {
+                                       icon = SuiteIcon.folder.getSmallIcon(theme);
+                               } else if (Jcr.isNodeType(node, NodeType.NT_FILE)) {
+                                       // TODO check recognized document types
+                                       icon = SuiteIcon.document.getSmallIcon(theme);
+                               } else if (Jcr.isNodeType(node, EntityType.document.get())) {
+                                       icon = SuiteIcon.document.getSmallIcon(theme);
+                               } else {
+                                       if (!isLeaf(node))
+                                               icon = SuiteIcon.folder.getSmallIcon(theme);
+                                       else
+                                               icon = null;
+                               }
+                               return icon;
+                       }
+
+               });
+
+               ui.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
+
+                       @Override
+                       public void doubleClick(DoubleClickEvent event) {
+                               Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
+                               if (user != null) {
+                                       CmsView.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
+                                                       SuiteEvent.eventProperties(user));
+                               }
+
+                       }
+               });
+               ui.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
+                               if (user != null) {
+                                       CmsView.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
+                                                       SuiteEvent.eventProperties(user));
+                               }
+                       }
+               });
+
                ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
                ui.getTreeViewer().setInput(context.getSession());
                return ui;
        }
 
        protected boolean isLeaf(Node node) {
-               return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, NodeType.NT_FILE);
+               return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, EntityType.document.get())
+                               || Jcr.isNodeType(node, NodeType.NT_FILE);
        }
 
        class Ui extends TreeOrSearchArea {
diff --git a/publishing/org.argeo.publishing.ui/OSGI-INF/documentUiProvider.xml b/publishing/org.argeo.publishing.ui/OSGI-INF/documentUiProvider.xml
new file mode 100644 (file)
index 0000000..5cee79f
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+   <implementation class="org.argeo.publishing.ui.DocumentUiProvider"/>
+   <service>
+      <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+   </service>
+   <properties entry="config/documentUiProvider.properties"/>
+</scr:component>
index 60d985cb7b225625a2c1418ea826cf3969286d38..a2a5f70ff80a6dfbd0824cf4c23b3844210f1dfc 100644 (file)
@@ -12,4 +12,5 @@ Provide-Capability:\
 cms.datamodel; name=docbook; cnd=/org/argeo/docbook/docbook.cnd; abstract=true
 
 Service-Component:\
-OSGI-INF/fontsServlet.xml
+OSGI-INF/fontsServlet.xml,\
+OSGI-INF/documentUiProvider.xml
index c58ea2178c3c8c54dccccca56ad435a7b073b474..2ef3d70ddae0cec16ab31c0ef8e2cfc4c510f67e 100644 (file)
@@ -1,5 +1,6 @@
-source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               OSGI-INF/
+               OSGI-INF/,\
+               OSGI-INF/documentUiProvider.xml
+source.. = src/
diff --git a/publishing/org.argeo.publishing.ui/config/documentUiProvider.properties b/publishing/org.argeo.publishing.ui/config/documentUiProvider.properties
new file mode 100644 (file)
index 0000000..2b9635f
--- /dev/null
@@ -0,0 +1,3 @@
+service.pid=argeo.publishing.ui.documentUiProvider
+
+entity.type=entity:document
\ No newline at end of file
diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/DocumentUiProvider.java b/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/DocumentUiProvider.java
new file mode 100644 (file)
index 0000000..17292d8
--- /dev/null
@@ -0,0 +1,38 @@
+package org.argeo.publishing.ui;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.cms.ui.CmsEditable;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.cms.ui.util.CmsUiUtils;
+import org.argeo.cms.ui.viewers.JcrVersionCmsEditable;
+import org.argeo.cms.ui.widgets.ScrolledPage;
+import org.argeo.docbook.DbkType;
+import org.argeo.docbook.ui.AbstractDbkViewer;
+import org.argeo.docbook.ui.DocumentTextEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class DocumentUiProvider implements CmsUiProvider {
+
+       @Override
+       public Control createUi(Composite parent, Node context) throws RepositoryException {
+               CmsEditable cmsEditable = new JcrVersionCmsEditable(context);
+               if (context.hasNode(DbkType.article.get())) {
+                       Node textNode = context.getNode(DbkType.article.get());
+                       // Title
+                       parent.setLayout(CmsUiUtils.noSpaceGridLayout());
+
+                       ScrolledPage page = new ScrolledPage(parent, SWT.NONE);
+                       page.setLayoutData(CmsUiUtils.fillAll());
+                       page.setLayout(CmsUiUtils.noSpaceGridLayout());
+
+                       AbstractDbkViewer dbkEditor = new DocumentTextEditor(page, SWT.NONE, textNode, cmsEditable);
+
+               }
+               return null;
+       }
+
+}