]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.common / src / org / simantics / browsing / ui / common / processors / DefaultViewpointContributionsProcessor.java
diff --git a/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java
new file mode 100644 (file)
index 0000000..9747d0e
--- /dev/null
@@ -0,0 +1,178 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.browsing.ui.common.processors;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+\r
+import org.simantics.browsing.ui.BuiltinKeys;\r
+import org.simantics.browsing.ui.NodeContext;\r
+import org.simantics.browsing.ui.NodeContext.QueryKey;\r
+import org.simantics.browsing.ui.NodeQueryManager;\r
+import org.simantics.browsing.ui.SelectionRequest;\r
+import org.simantics.browsing.ui.Tester;\r
+import org.simantics.browsing.ui.common.NodeContextUtil;\r
+import org.simantics.browsing.ui.common.Testers;\r
+import org.simantics.browsing.ui.content.ContributionViewpoint;\r
+import org.simantics.browsing.ui.content.Viewpoint;\r
+import org.simantics.browsing.ui.content.ViewpointContribution;\r
+import org.simantics.browsing.ui.content.ViewpointContributionFactory;\r
+\r
+public class DefaultViewpointContributionsProcessor extends AbstractNodeQueryProcessor<Collection<ViewpointContribution>> {\r
+\r
+    public static final Collection<ViewpointContribution> EMPTY = Collections.emptyList();\r
+\r
+    @Override\r
+    public QueryKey<Collection<ViewpointContribution>> getIdentifier() {\r
+        return BuiltinKeys.VIEWPOINT_CONTRIBUTIONS;\r
+    }\r
+\r
+    private String extractFilterString(Collection<SelectionRequest> requests) {\r
+        if(requests == null) return null;\r
+        for(SelectionRequest request : requests) {\r
+            if(SelectionRequest.Request.FILTER.equals(request.getRequest())) {\r
+                return request.getData();\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+\r
+    // TODO: evaluate still if this is ok\r
+    private String adjustFilter(String filter) {\r
+//        System.out.println("DefaultViewpointContributionsProcessor.adjustFilter=" + filter);\r
+        if(filter == null) return null;\r
+        String[] tokens = filter.split(" ");\r
+        StringBuilder b = new StringBuilder();\r
+        boolean first = true;\r
+        for(String token : tokens) {\r
+//            System.out.println("DefaultViewpointContributionsProcessor.token=" + token);\r
+            if(token.startsWith("$")) {\r
+                if(first) first = false;\r
+                else b.append(" ");\r
+                b.append(token.substring(1));\r
+            }\r
+        }\r
+        return b.toString();\r
+    }\r
+\r
+    @Override\r
+    public Collection<ViewpointContribution> query(NodeQueryManager manager, NodeContext context_) {\r
+\r
+        final Viewpoint viewpoint = manager.query(context_, BuiltinKeys.SELECTED_VIEWPOINT);\r
+        if (viewpoint == null)\r
+            return EMPTY;\r
+\r
+        if(viewpoint instanceof ContributionViewpoint) {\r
+\r
+            String filterString = null;\r
+            Collection<SelectionRequest> selectionRequests = manager.query(context_, BuiltinKeys.SELECTION_REQUESTS);\r
+            filterString = extractFilterString(selectionRequests);\r
+\r
+            String adjustedFilter = adjustFilter(filterString);\r
+\r
+            //System.out.println("DefaultViewpointContributionsProcessor: filter queries = " + filterString + " -> " + adjustedFilter);\r
+\r
+            NodeContext context = NodeContextUtil.withConstant(context_, BuiltinKeys.FILTER, adjustedFilter);\r
+\r
+            ArrayList<ViewpointContribution> result = new ArrayList<ViewpointContribution>();\r
+            ContributionViewpoint contributionViewpoint = (ContributionViewpoint)viewpoint;\r
+            for(ViewpointContributionFactory factory : contributionViewpoint.getContributions()) {\r
+//             System.out.println("viewpoint contribution " + factory);\r
+//             Class<?> clazz = factory.getInputClass();\r
+//             Tester test = factory.getNodeContextTester();\r
+//             if(clazz.isInstance(context.getConstant(BuiltinKeys.INPUT))) {\r
+//                     if(test == null || test.test(manager, context)) {\r
+                result.add(manager.query(context, new BuiltinKeys.ViewpointContributionKey(factory)));\r
+//                     }\r
+//             }\r
+            }\r
+            return result;\r
+\r
+        } else {\r
+\r
+            ViewpointContribution contribution = new ViewpointContribution() {\r
+\r
+                @Override\r
+                public Collection<NodeContext> getContribution() {\r
+                    ArrayList<NodeContext> result = new ArrayList<NodeContext>();\r
+                    for(NodeContext context : viewpoint.getChildren()) result.add(context);\r
+                    return result;\r
+                }\r
+\r
+                @Override\r
+                public Tester getNodeContextTester() {\r
+                    return Testers.PASS;\r
+                }\r
+\r
+                @Override\r
+                public Class<?> getInputClass() {\r
+                    return Object.class;\r
+                }\r
+\r
+            };\r
+\r
+            return Collections.singletonList(contribution);\r
+\r
+        }\r
+\r
+\r
+//        Collection<ViewpointContribution> contributions = manager.query(context, BuiltinKeys.VIEWPOINT_CONTRIBUTIONS);\r
+//        if (contributions == null)\r
+//            return PrunedChildrenResult.EMPTY;\r
+//\r
+//        HashSet<INodeContext> children = new HashSet<INodeContext>();\r
+//\r
+//        for(ViewpointContribution contribution : contributions) {\r
+//            children.addAll(contribution.getContribution());\r
+//        }\r
+//\r
+////        Viewpoint viewpoint = manager.query(context, BuiltinKeys.SELECTED_VIEWPOINT);\r
+////        if (viewpoint == null)\r
+////            return PrunedChildrenResult.EMPTY;\r
+////\r
+////        INodeContext[] children = viewpoint.getChildren();\r
+//\r
+//        Collection<SelectionRequest> selectionRequests = manager.query(context, BuiltinKeys.SELECTION_REQUESTS);\r
+//        if (selectionRequests == null)\r
+//            return new PrunedChildrenResult(children.size(), children.toArray(INodeContext.NONE));\r
+//\r
+//        SelectionRequest[] reqs = selectionRequests.toArray(new SelectionRequest[selectionRequests.size()]);\r
+//\r
+//        ArrayList<INodeContext> pruned = new ArrayList<INodeContext>();\r
+//        for (INodeContext ctx : children) {\r
+//            boolean add = true;\r
+//\r
+//            if (selectionRequests != null) {\r
+//                for(SelectionRequest req : reqs) {\r
+//                    if (req.getRequest() == SelectionRequest.Request.HIDE) {\r
+//                        if (req.isIncluded(manager, ctx)) {\r
+//                            add = false;\r
+//                            break;\r
+//                        }\r
+//                    }\r
+//                }\r
+//            }\r
+//\r
+//            if (add)\r
+//                pruned.add(ctx);\r
+//        }\r
+//        return new PrunedChildrenResult(children.size(), pruned.toArray(INodeContext.NONE));\r
+\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "ViewpointContributionsProcessor";\r
+    }\r
+\r
+}
\ No newline at end of file