Put Eclipse and JCR components in subdirs in order to clarify indirect
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / gcr / GcrContentTreeView.java
diff --git a/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/gcr/GcrContentTreeView.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/gcr/GcrContentTreeView.java
new file mode 100644 (file)
index 0000000..4039f2b
--- /dev/null
@@ -0,0 +1,130 @@
+package org.argeo.cms.swt.gcr;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import javax.xml.namespace.QName;
+
+import org.argeo.api.acr.Content;
+import org.argeo.cms.acr.fs.FsContentProvider;
+import org.argeo.cms.swt.CmsSwtUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class GcrContentTreeView extends Composite {
+       private Tree tree;
+       private Table table;
+       private Content rootContent;
+
+       private Content selected;
+
+       public GcrContentTreeView(Composite parent, int style, Content content) {
+               super(parent, style);
+               this.rootContent = content;
+               this.selected = rootContent;
+               setLayout(new GridLayout(2, false));
+               initTree();
+               GridData treeGd = CmsSwtUtils.fillHeight();
+               treeGd.widthHint = 300;
+               tree.setLayoutData(treeGd);
+               initTable();
+
+               table.setLayoutData(CmsSwtUtils.fillAll());
+       }
+
+       protected void initTree() {
+               tree = new Tree(this, 0);
+               for (Content c : rootContent) {
+                       TreeItem root = new TreeItem(tree, 0);
+                       root.setText(c.getName().toString());
+                       root.setData(c);
+                       new TreeItem(root, 0);
+               }
+               tree.addListener(SWT.Expand, event -> {
+                       final TreeItem root = (TreeItem) event.item;
+                       TreeItem[] items = root.getItems();
+                       for (TreeItem item : items) {
+                               if (item.getData() != null)
+                                       return;
+                               item.dispose();
+                       }
+                       Content content = (Content) root.getData();
+                       for (Content c : content) {
+                               TreeItem item = new TreeItem(root, 0);
+                               item.setText(c.getName().toString());
+                               item.setData(c);
+                               boolean hasChildren = true;
+                               if (hasChildren) {
+                                       new TreeItem(item, 0);
+                               }
+                       }
+               });
+               tree.addListener(SWT.Selection, event -> {
+                       TreeItem item = (TreeItem) event.item;
+                       selected = (Content) item.getData();
+                       refreshTable();
+               });
+       }
+
+       protected void initTable() {
+               table = new Table(this, 0);
+               table.setLinesVisible(true);
+               table.setHeaderVisible(true);
+               TableColumn keyCol = new TableColumn(table, SWT.NONE);
+               keyCol.setText("Attribute");
+               keyCol.setWidth(200);
+               TableColumn valueCol = new TableColumn(table, SWT.NONE);
+               valueCol.setText("Value");
+               keyCol.setWidth(300);
+               refreshTable();
+       }
+
+       protected void refreshTable() {
+               for (TableItem item : table.getItems()) {
+                       item.dispose();
+               }
+               for (QName key : selected.keySet()) {
+                       TableItem item = new TableItem(table, 0);
+                       item.setText(0, key.toString());
+                       Object value = selected.get(key);
+                       item.setText(1, value.toString());
+               }
+               table.getColumn(0).pack();
+               table.getColumn(1).pack();
+       }
+
+       public static void main(String[] args) {
+               Path basePath;
+               if (args.length > 0) {
+                       basePath = Paths.get(args[0]);
+               } else {
+                       basePath = Paths.get(System.getProperty("user.home"));
+               }
+
+               final Display display = new Display();
+               final Shell shell = new Shell(display);
+               shell.setText(basePath.toString());
+               shell.setLayout(new FillLayout());
+
+               FsContentProvider contentSession = new FsContentProvider(basePath);
+//             GcrContentTreeView treeView = new GcrContentTreeView(shell, 0, contentSession.get("/"));
+
+               shell.setSize(shell.computeSize(800, 600));
+               shell.open();
+               while (!shell.isDisposed()) {
+                       if (!display.readAndDispatch())
+                               display.sleep();
+               }
+               display.dispose();
+       }
+}