1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.browsing.ui.common.processors;
\r
14 import java.util.ArrayList;
\r
15 import java.util.Collection;
\r
16 import java.util.Collections;
\r
18 import org.simantics.browsing.ui.BuiltinKeys;
\r
19 import org.simantics.browsing.ui.NodeContext;
\r
20 import org.simantics.browsing.ui.NodeContext.QueryKey;
\r
21 import org.simantics.browsing.ui.NodeQueryManager;
\r
22 import org.simantics.browsing.ui.SelectionRequest;
\r
23 import org.simantics.browsing.ui.Tester;
\r
24 import org.simantics.browsing.ui.common.NodeContextUtil;
\r
25 import org.simantics.browsing.ui.common.Testers;
\r
26 import org.simantics.browsing.ui.content.ContributionViewpoint;
\r
27 import org.simantics.browsing.ui.content.Viewpoint;
\r
28 import org.simantics.browsing.ui.content.ViewpointContribution;
\r
29 import org.simantics.browsing.ui.content.ViewpointContributionFactory;
\r
31 public class DefaultViewpointContributionsProcessor extends AbstractNodeQueryProcessor<Collection<ViewpointContribution>> {
\r
33 public static final Collection<ViewpointContribution> EMPTY = Collections.emptyList();
\r
36 public QueryKey<Collection<ViewpointContribution>> getIdentifier() {
\r
37 return BuiltinKeys.VIEWPOINT_CONTRIBUTIONS;
\r
40 private String extractFilterString(Collection<SelectionRequest> requests) {
\r
41 if(requests == null) return null;
\r
42 for(SelectionRequest request : requests) {
\r
43 if(SelectionRequest.Request.FILTER.equals(request.getRequest())) {
\r
44 return request.getData();
\r
50 // TODO: evaluate still if this is ok
\r
51 private String adjustFilter(String filter) {
\r
52 // System.out.println("DefaultViewpointContributionsProcessor.adjustFilter=" + filter);
\r
53 if(filter == null) return null;
\r
54 String[] tokens = filter.split(" ");
\r
55 StringBuilder b = new StringBuilder();
\r
56 boolean first = true;
\r
57 for(String token : tokens) {
\r
58 // System.out.println("DefaultViewpointContributionsProcessor.token=" + token);
\r
59 if(token.startsWith("$")) {
\r
60 if(first) first = false;
\r
62 b.append(token.substring(1));
\r
65 return b.toString();
\r
69 public Collection<ViewpointContribution> query(NodeQueryManager manager, NodeContext context_) {
\r
71 final Viewpoint viewpoint = manager.query(context_, BuiltinKeys.SELECTED_VIEWPOINT);
\r
72 if (viewpoint == null)
\r
75 if(viewpoint instanceof ContributionViewpoint) {
\r
77 String filterString = null;
\r
78 Collection<SelectionRequest> selectionRequests = manager.query(context_, BuiltinKeys.SELECTION_REQUESTS);
\r
79 filterString = extractFilterString(selectionRequests);
\r
81 String adjustedFilter = adjustFilter(filterString);
\r
83 //System.out.println("DefaultViewpointContributionsProcessor: filter queries = " + filterString + " -> " + adjustedFilter);
\r
85 NodeContext context = NodeContextUtil.withConstant(context_, BuiltinKeys.FILTER, adjustedFilter);
\r
87 ArrayList<ViewpointContribution> result = new ArrayList<ViewpointContribution>();
\r
88 ContributionViewpoint contributionViewpoint = (ContributionViewpoint)viewpoint;
\r
89 for(ViewpointContributionFactory factory : contributionViewpoint.getContributions()) {
\r
90 // System.out.println("viewpoint contribution " + factory);
\r
91 // Class<?> clazz = factory.getInputClass();
\r
92 // Tester test = factory.getNodeContextTester();
\r
93 // if(clazz.isInstance(context.getConstant(BuiltinKeys.INPUT))) {
\r
94 // if(test == null || test.test(manager, context)) {
\r
95 result.add(manager.query(context, new BuiltinKeys.ViewpointContributionKey(factory)));
\r
103 ViewpointContribution contribution = new ViewpointContribution() {
\r
106 public Collection<NodeContext> getContribution() {
\r
107 ArrayList<NodeContext> result = new ArrayList<NodeContext>();
\r
108 for(NodeContext context : viewpoint.getChildren()) result.add(context);
\r
113 public Tester getNodeContextTester() {
\r
114 return Testers.PASS;
\r
118 public Class<?> getInputClass() {
\r
119 return Object.class;
\r
124 return Collections.singletonList(contribution);
\r
129 // Collection<ViewpointContribution> contributions = manager.query(context, BuiltinKeys.VIEWPOINT_CONTRIBUTIONS);
\r
130 // if (contributions == null)
\r
131 // return PrunedChildrenResult.EMPTY;
\r
133 // HashSet<INodeContext> children = new HashSet<INodeContext>();
\r
135 // for(ViewpointContribution contribution : contributions) {
\r
136 // children.addAll(contribution.getContribution());
\r
139 //// Viewpoint viewpoint = manager.query(context, BuiltinKeys.SELECTED_VIEWPOINT);
\r
140 //// if (viewpoint == null)
\r
141 //// return PrunedChildrenResult.EMPTY;
\r
143 //// INodeContext[] children = viewpoint.getChildren();
\r
145 // Collection<SelectionRequest> selectionRequests = manager.query(context, BuiltinKeys.SELECTION_REQUESTS);
\r
146 // if (selectionRequests == null)
\r
147 // return new PrunedChildrenResult(children.size(), children.toArray(INodeContext.NONE));
\r
149 // SelectionRequest[] reqs = selectionRequests.toArray(new SelectionRequest[selectionRequests.size()]);
\r
151 // ArrayList<INodeContext> pruned = new ArrayList<INodeContext>();
\r
152 // for (INodeContext ctx : children) {
\r
153 // boolean add = true;
\r
155 // if (selectionRequests != null) {
\r
156 // for(SelectionRequest req : reqs) {
\r
157 // if (req.getRequest() == SelectionRequest.Request.HIDE) {
\r
158 // if (req.isIncluded(manager, ctx)) {
\r
167 // pruned.add(ctx);
\r
169 // return new PrunedChildrenResult(children.size(), pruned.toArray(INodeContext.NONE));
\r
174 public String toString() {
\r
175 return "ViewpointContributionsProcessor";
\r