</service>
<property name="service.ranking" type="Integer" value="-1000"/>
<properties entry="config/leadPane.properties"/>
- <property name="defaultLayers" type="String">argeo.product.knowledge.termsLayer
+ <property name="defaultLayers" type="String">argeo.product.knowledge.structureLayer
+argeo.product.knowledge.termsLayer
</property>
<reference bind="addLayer" cardinality="1..n" interface="org.argeo.app.swt.ux.SwtAppLayer" name="SuiteLayer" policy="dynamic" unbind="removeLayer"/>
</scr:component>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="argeo.product.knowledge.spaceEntryArea">
+ <implementation class="org.argeo.app.swt.space.SpaceEntryArea"/>
+ <service>
+ <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+ </service>
+ <property name="service.ranking" type="Integer" value="-1000"/>
+ <properties entry="config/spaceEntryArea.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" name="argeo.product.knowledge.structureLayer">
+ <implementation class="org.argeo.app.swt.ux.DefaultEditionLayer"/>
+ <service>
+ <provide interface="org.argeo.app.swt.ux.SwtAppLayer"/>
+ </service>
+ <property name="service.ranking" type="Integer" value="-1000"/>
+ <properties entry="config/structureLayer.properties"/>
+ <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.swt.acr.SwtUiProvider" name="CmsUiProvider" policy="dynamic" target="(service.pid=argeo.product.knowledge.spaceEntryArea)"/>
+</scr:component>
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.argeo.product.knowledge.swtArgeoApp">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="argeo.product.knowledge.swtArgeoApp">
<implementation class="org.argeo.app.swt.ux.SwtArgeoApp"/>
<service>
<provide interface="org.argeo.api.cms.CmsApp"/>
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Terms Entry Area">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="argeo.product.knowledge.termsEntryArea">
<implementation class="org.argeo.app.swt.terms.TermsEntryArea"/>
<service>
<provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Terms Layer">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="argeo.product.knowledge.termsLayer">
<implementation class="org.argeo.app.swt.ux.DefaultEditionLayer"/>
<service>
<provide interface="org.argeo.app.swt.ux.SwtAppLayer"/>
Service-Component:\
OSGI-INF/swtArgeoApp.xml,\
OSGI-INF/leadPane.xml,\
+OSGI-INF/spaceEntryArea.xml,\
+OSGI-INF/structureLayer.xml,\
OSGI-INF/termsEntryArea.xml,\
OSGI-INF/termsLayer.xml,\
Import-Package:\
+org.argeo.app.api,\
org.argeo.cms.swt.acr,\
org.argeo.app.swt.ux,\
org.argeo.app.swt.terms,\
+org.argeo.app.swt.space,\
*
\ No newline at end of file
--- /dev/null
+service.pid=argeo.product.knowledge.spaceEntryArea
--- /dev/null
+service.pid=argeo.product.knowledge.structureLayer
+
+title=Structure
+icon=folder
+
+#entity.type=entity:space
\ No newline at end of file
title=Terms
icon=dashboard
-entity.type=entity:terms,entity:term
\ No newline at end of file
+entity.type=entity:terms,entity:term,entity:typologies
\ No newline at end of file
--- /dev/null
+package org.argeo.app.swt.space;
+
+import java.net.URI;
+import java.util.List;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.acr.NamespaceUtils;
+import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.cms.ux.CmsView;
+import org.argeo.app.api.EntityType;
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.argeo.cms.swt.widgets.SwtTreeView;
+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;
+
+/** Entry area for managing the typologies. */
+public class SpaceEntryArea implements SwtUiProvider {
+ @Override
+ public Control createUiPart(Composite parent, Content content) {
+ CmsView cmsView = CmsSwtUtils.getCmsView(parent);
+
+ parent.setLayout(new GridLayout());
+
+ ContentHierarchicalPart contentPart = new ContentHierarchicalPart() {
+
+ @Override
+ public List<Content> getChildren(Content parent) {
+ if (parent != null)
+ return super.getChildren(parent);
+ List<Content> res = ((ProvidedContent) content).getSession().search((bs) -> {
+ bs.from(URI.create("/sys")).where((f) -> f.isContentClass(EntityType.space));
+ }).filter((c) -> noSpaceParent((ProvidedContent) c)).toList();
+ return res;
+ }
+
+ };
+ contentPart.addColumn((c) -> NamespaceUtils.toPrefixedName(c.getName()));
+// contentPart.setInput(content);
+
+ SwtTreeView<Content> view = new SwtTreeView<>(parent, 0, contentPart);
+ view.setLayoutData(CmsSwtUtils.fillAll());
+
+ contentPart.setInput(null);
+ return view;
+
+ }
+
+ private static boolean noSpaceParent(ProvidedContent content) {
+ if (content.isRoot() || !content.isParentAccessible())// end condition
+ return true;
+ ProvidedContent parent = (ProvidedContent) content.getParent();
+ if (parent.hasContentClass(EntityType.space))
+ return false;
+ return noSpaceParent(parent);
+ }
+}
};
contentPart.addColumn((c) -> NamespaceUtils.toPrefixedName(c.getName()));
- contentPart.setInput(rootContent);
+// contentPart.setInput(rootContent);
SwtTreeView<Content> view = new SwtTreeView<>(parent, 0, contentPart);
view.setLayoutData(CmsSwtUtils.fillAll());