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