X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Flibrary%2FContentEntryArea.java;fp=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Flibrary%2FContentEntryArea.java;h=af31ac59c9f0cfff3f4ab610e79ec4b0650f8b08;hp=0000000000000000000000000000000000000000;hb=6e56ffa34cb02ab04d028423aea342e3dfed4358;hpb=c285180bece610b2c2921d44fe14b6dde2123efa diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java b/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java new file mode 100644 index 0000000..af31ac5 --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java @@ -0,0 +1,169 @@ +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.cms.CmsTheme; +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.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 ContentEntryArea implements CmsUiProvider { + + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + CmsTheme 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 = 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) { + 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()); + ui.getTreeViewer().setInput(context.getSession()); + 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); + } + + 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 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) { + } + + } + +}