Improve Argeo Knowledge app.
[gpl/argeo-suite.git] / swt / org.argeo.app.swt / src / org / argeo / app / swt / space / SpaceEntryArea.java
diff --git a/swt/org.argeo.app.swt/src/org/argeo/app/swt/space/SpaceEntryArea.java b/swt/org.argeo.app.swt/src/org/argeo/app/swt/space/SpaceEntryArea.java
new file mode 100644 (file)
index 0000000..2c28a79
--- /dev/null
@@ -0,0 +1,59 @@
+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);
+       }
+}