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