org.argeo.app.core \
org.argeo.app.servlet.odk \
org.argeo.app.servlet.publish \
+org.argeo.app.ux \
org.argeo.app.ui \
org.argeo.app.theme.default \
org.argeo.app.profile.acr.fs \
//
ODK("odk", "http://www.opendatakit.org/xforms", null, null),
//
+ WGS84("geo", "http://www.w3.org/2003/01/geo/wgs84_pos#", null, null),
+ //
;
private final static String RESOURCE_BASE = "/org/argeo/app/core/schemas/";
processContents="lax" />
</xs:complexType>
</xs:element>
+
+ <xs:element name="terms">
+ <xs:complexType>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="entity:term"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="term">
+ <xs:complexType>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="entity:term"></xs:element>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any"
+ processContents="lax" />
+ </xs:complexType>
+ </xs:element>
</xs:schema>
\ No newline at end of file
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
<implementation class="org.argeo.app.ui.library.ContentEntryArea"/>
<service>
- <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+ <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
</service>
<properties entry="config/contentEntryArea.properties"/>
- <reference bind="setJcrContentProvider" cardinality="1..1" interface="org.argeo.cms.jcr.acr.JcrContentProvider" name="JcrContentProvider" policy="static"/>
</scr:component>
<service>
<provide interface="org.argeo.app.ui.SuiteLayer"/>
</service>
- <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" target="(service.pid=argeo.library.ui.contentEntryArea)"/>
+ <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.swt.acr.SwtUiProvider" policy="dynamic" target="(service.pid=argeo.library.ui.contentEntryArea)"/>
<properties entry="config/contentLayer.properties"/>
</scr:component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+ <implementation class="org.argeo.app.ui.publish.PublishEntryArea"/>
+ <service>
+ <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+ </service>
+ <properties entry="config/publishEntryArea.properties"/>
+</scr:component>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+ <implementation class="org.argeo.app.ui.publish.PublishUiProvider"/>
+ <service>
+ <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+ </service>
+ <properties entry="config/publishUiProvider.properties"/>
+</scr:component>
OSGI-INF/overviewMap.xml,\
OSGI-INF/wwwLayer.xml,\
OSGI-INF/documentUiProvider.xml,\
+OSGI-INF/publishEntryArea.xml,\
+OSGI-INF/publishUiProvider.xml,\
--- /dev/null
+service.pid=argeo.publish.ui.publishEntryArea
--- /dev/null
+service.pid=argeo.publishing.ui.publishUiProvider
+
+#entity.type=entity:document,nt:file
\ No newline at end of file
package org.argeo.app.ui.library;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.query.Query;
-
import org.argeo.api.acr.Content;
-import org.argeo.api.cms.CmsConstants;
+import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.cms.CmsLog;
+import org.argeo.api.cms.ux.CmsView;
import org.argeo.app.api.EntityType;
import org.argeo.app.ui.SuiteEvent;
-import org.argeo.app.ui.SuiteIcon;
-import org.argeo.app.ui.widgets.TreeOrSearchArea;
-import org.argeo.cms.jcr.acr.JcrContentProvider;
-import org.argeo.cms.swt.CmsSwtTheme;
import org.argeo.cms.swt.CmsSwtUtils;
-import org.argeo.cms.ui.CmsUiProvider;
-import org.argeo.jcr.Jcr;
-import org.argeo.jcr.JcrException;
-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.argeo.cms.swt.acr.SwtUiProvider;
+import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
+import org.argeo.cms.ux.acr.ContentHierarchicalPart;
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 {
- private JcrContentProvider jcrContentProvider;
+public class ContentEntryArea implements SwtUiProvider {
+ private final static CmsLog log = CmsLog.getLog(ContentEntryArea.class);
@Override
public Control createUiPart(Composite parent, Content context) {
- CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent);
+ CmsView cmsView = CmsSwtUtils.getCmsView(parent);
parent.setLayout(new GridLayout());
- Ui ui = new Ui(parent, SWT.NONE);
- ui.setLayoutData(CmsSwtUtils.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 = theme.getSmallIcon(SuiteIcon.folder);
- } else if (Jcr.isNodeType(node, NodeType.NT_FILE)) {
- // TODO check recognized document types
- icon = theme.getSmallIcon(SuiteIcon.document);
- } else if (Jcr.isNodeType(node, EntityType.document.get())) {
- icon = theme.getSmallIcon(SuiteIcon.document);
- } else {
- if (!isLeaf(node))
- icon = theme.getSmallIcon(SuiteIcon.folder);
- else
- icon = null;
- }
- return icon;
- }
+ new Label(parent, 0).setText(context.toString());
- });
+ Content rootContent = ((ProvidedContent) context).getSession().getRepository().get().get("/srv");
- ui.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() {
+ ContentHierarchicalPart contentPart = new ContentHierarchicalPart() {
@Override
- public void doubleClick(DoubleClickEvent event) {
- Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
- if (user != null) {
- CmsSwtUtils.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) {
- CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
- SuiteEvent.eventProperties(user));
- }
+ protected boolean isLeaf(Content content) {
+ if (content.hasContentClass(EntityType.document.qName()))
+ return true;
+ return super.isLeaf(content);
}
+ };
+ contentPart.setInput(rootContent);
+
+ SwtHierarchicalPart<Content> view = new SwtHierarchicalPart<>(parent, 0, contentPart);
+ view.setLayoutData(CmsSwtUtils.fillAll());
+
+ contentPart.setInput(rootContent);
+ contentPart.onSelected((o) -> {
+ Content c = (Content) o;
+ log.debug(c.getPath());
+ // cmsView.sendEvent(SuiteEvent.refreshPart.topic(),
+ // SuiteEvent.eventProperties(c));
});
-
- ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
- Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
- ui.getTreeViewer().setInput(session);
- return ui;
- }
-
- protected boolean isLeaf(Node node) {
- return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, EntityType.document.get())
- || Jcr.isNodeType(node, NodeType.NT_FILE);
- }
-
- public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
- this.jcrContentProvider = jcrContentProvider;
- }
-
- class Ui extends TreeOrSearchArea {
-
- public Ui(Composite parent, int style) {
- super(parent, style);
- }
-
- }
-
- class SpacesContentProvider implements ITreeContentProvider {
-
- @Override
- public Object[] getElements(Object inputElement) {
- Session session = (Session) inputElement;
- try {
- Query query = session.getWorkspace().getQueryManager()
- .createQuery("SELECT * FROM [" + EntityType.space.get() + "]", Query.JCR_SQL2);
- NodeIterator spacesIt = query.execute().getNodes();
- SortedMap<String, Node> map = new TreeMap<>();
- while (spacesIt.hasNext()) {
- Node space = spacesIt.nextNode();
- String path = space.getPath();
- map.put(path, space);
- }
- return map.values().toArray();
- } catch (RepositoryException e) {
- throw new JcrException(e);
- }
- }
-
- @Override
- public Object[] getChildren(Object parentElement) {
- Node parent = (Node) parentElement;
- if (isLeaf(parent))
- return null;
- return Jcr.getNodes(parent).toArray();
- }
-
- @Override
- public Object getParent(Object element) {
- Node node = (Node) element;
- return Jcr.getParent(node);
- }
-
- @Override
- public boolean hasChildren(Object element) {
- Node node = (Node) element;
- return !isLeaf(node);
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
-
+ return view;
}
}
--- /dev/null
+package org.argeo.app.ui.library;
+
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.query.Query;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsConstants;
+import org.argeo.app.api.EntityType;
+import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteIcon;
+import org.argeo.app.ui.widgets.TreeOrSearchArea;
+import org.argeo.cms.jcr.acr.JcrContentProvider;
+import org.argeo.cms.swt.CmsSwtTheme;
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.jcr.Jcr;
+import org.argeo.jcr.JcrException;
+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;
+
+public class JcrContentEntryArea implements CmsUiProvider {
+ private JcrContentProvider jcrContentProvider;
+
+ @Override
+ public Control createUiPart(Composite parent, Content context) {
+ CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent);
+
+ parent.setLayout(new GridLayout());
+ Ui ui = new Ui(parent, SWT.NONE);
+ ui.setLayoutData(CmsSwtUtils.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 = theme.getSmallIcon(SuiteIcon.folder);
+ } else if (Jcr.isNodeType(node, NodeType.NT_FILE)) {
+ // TODO check recognized document types
+ icon = theme.getSmallIcon(SuiteIcon.document);
+ } else if (Jcr.isNodeType(node, EntityType.document.get())) {
+ icon = theme.getSmallIcon(SuiteIcon.document);
+ } else {
+ if (!isLeaf(node))
+ icon = theme.getSmallIcon(SuiteIcon.folder);
+ 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) {
+ CmsSwtUtils.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) {
+ CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
+ SuiteEvent.eventProperties(user));
+ }
+ }
+ });
+
+ ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
+ Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
+ ui.getTreeViewer().setInput(session);
+ return ui;
+ }
+
+ protected boolean isLeaf(Node node) {
+ return Jcr.isNodeType(node, EntityType.entity.get()) || Jcr.isNodeType(node, EntityType.document.get())
+ || Jcr.isNodeType(node, NodeType.NT_FILE);
+ }
+
+ public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+ this.jcrContentProvider = jcrContentProvider;
+ }
+
+ class Ui extends TreeOrSearchArea {
+
+ public Ui(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ }
+
+ class SpacesContentProvider implements ITreeContentProvider {
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ Session session = (Session) inputElement;
+ try {
+ Query query = session.getWorkspace().getQueryManager()
+ .createQuery("SELECT * FROM [" + EntityType.space.get() + "]", Query.JCR_SQL2);
+ NodeIterator spacesIt = query.execute().getNodes();
+ SortedMap<String, Node> map = new TreeMap<>();
+ while (spacesIt.hasNext()) {
+ Node space = spacesIt.nextNode();
+ String path = space.getPath();
+ map.put(path, space);
+ }
+ return map.values().toArray();
+ } catch (RepositoryException e) {
+ throw new JcrException(e);
+ }
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ Node parent = (Node) parentElement;
+ if (isLeaf(parent))
+ return null;
+ return Jcr.getNodes(parent).toArray();
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ Node node = (Node) element;
+ return Jcr.getParent(node);
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ Node node = (Node) element;
+ return !isLeaf(node);
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ }
+
+}
--- /dev/null
+package org.argeo.app.ui.publish;
+
+import org.argeo.api.acr.Content;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class PublishEntryArea implements SwtUiProvider {
+
+ @Override
+ public Control createUiPart(Composite parent, Content context) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
--- /dev/null
+package org.argeo.app.ui.publish;
+
+import org.argeo.api.acr.Content;
+import org.argeo.app.ux.docbook.DocBookViewer;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class PublishUiProvider implements SwtUiProvider {
+
+ @Override
+ public Control createUiPart(Composite parent, Content context) {
+ DocBookViewer docBookViewer = new DocBookViewer(parent, 0, context);
+ return docBookViewer;
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.app.ux</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
--- /dev/null
+package org.argeo.app.ux.docbook;
+
+import org.argeo.api.acr.Content;
+import org.argeo.cms.swt.acr.ContentComposite;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class DocBookViewer extends ContentComposite {
+
+ public DocBookViewer(Composite parent, int style, Content item) {
+ super(parent, style, item);
+ new Label(parent, 0).setText(item.toString());
+ }
+
+}