--- /dev/null
+/*******************************************************************************\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