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.app.EntityType; import org.argeo.api.cms.ux.CmsView; 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 getChildren(Content parent) { if (parent != null) return super.getChildren(parent); List 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 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); } }