]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.browsing.ui.common / src / org / simantics / browsing / ui / common / processors / DefaultViewpointContributionsProcessor.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
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
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.browsing.ui.common.processors;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.Collections;
17
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;
30
31 public class DefaultViewpointContributionsProcessor extends AbstractNodeQueryProcessor<Collection<ViewpointContribution>> {
32
33     public static final Collection<ViewpointContribution> EMPTY = Collections.emptyList();
34
35     @Override
36     public QueryKey<Collection<ViewpointContribution>> getIdentifier() {
37         return BuiltinKeys.VIEWPOINT_CONTRIBUTIONS;
38     }
39
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();
45             }
46         }
47         return null;
48     }
49
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();
56         boolean first = true;
57         for(String token : tokens) {
58 //            System.out.println("DefaultViewpointContributionsProcessor.token=" + token);
59             if(token.startsWith("$")) {
60                 if(first) first = false;
61                 else b.append(" ");
62                 b.append(token.substring(1));
63             }
64         }
65         return b.toString();
66     }
67
68     @Override
69     public Collection<ViewpointContribution> query(NodeQueryManager manager, NodeContext context_) {
70
71         final Viewpoint viewpoint = manager.query(context_, BuiltinKeys.SELECTED_VIEWPOINT);
72         if (viewpoint == null)
73             return EMPTY;
74
75         if(viewpoint instanceof ContributionViewpoint) {
76
77             String filterString = null;
78             Collection<SelectionRequest> selectionRequests = manager.query(context_, BuiltinKeys.SELECTION_REQUESTS);
79             filterString = extractFilterString(selectionRequests);
80
81             String adjustedFilter = adjustFilter(filterString);
82
83             //System.out.println("DefaultViewpointContributionsProcessor: filter queries = " + filterString + " -> " + adjustedFilter);
84
85             NodeContext context = NodeContextUtil.withConstant(context_, BuiltinKeys.FILTER, adjustedFilter);
86
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)));
96 //                      }
97 //              }
98             }
99             return result;
100
101         } else {
102
103             ViewpointContribution contribution = new ViewpointContribution() {
104
105                 @Override
106                 public Collection<NodeContext> getContribution() {
107                     ArrayList<NodeContext> result = new ArrayList<NodeContext>();
108                     for(NodeContext context : viewpoint.getChildren()) result.add(context);
109                     return result;
110                 }
111
112                 @Override
113                 public Tester getNodeContextTester() {
114                     return Testers.PASS;
115                 }
116
117                 @Override
118                 public Class<?> getInputClass() {
119                     return Object.class;
120                 }
121
122             };
123
124             return Collections.singletonList(contribution);
125
126         }
127
128
129 //        Collection<ViewpointContribution> contributions = manager.query(context, BuiltinKeys.VIEWPOINT_CONTRIBUTIONS);
130 //        if (contributions == null)
131 //            return PrunedChildrenResult.EMPTY;
132 //
133 //        HashSet<INodeContext> children = new HashSet<INodeContext>();
134 //
135 //        for(ViewpointContribution contribution : contributions) {
136 //            children.addAll(contribution.getContribution());
137 //        }
138 //
139 ////        Viewpoint viewpoint = manager.query(context, BuiltinKeys.SELECTED_VIEWPOINT);
140 ////        if (viewpoint == null)
141 ////            return PrunedChildrenResult.EMPTY;
142 ////
143 ////        INodeContext[] children = viewpoint.getChildren();
144 //
145 //        Collection<SelectionRequest> selectionRequests = manager.query(context, BuiltinKeys.SELECTION_REQUESTS);
146 //        if (selectionRequests == null)
147 //            return new PrunedChildrenResult(children.size(), children.toArray(INodeContext.NONE));
148 //
149 //        SelectionRequest[] reqs = selectionRequests.toArray(new SelectionRequest[selectionRequests.size()]);
150 //
151 //        ArrayList<INodeContext> pruned = new ArrayList<INodeContext>();
152 //        for (INodeContext ctx : children) {
153 //            boolean add = true;
154 //
155 //            if (selectionRequests != null) {
156 //                for(SelectionRequest req : reqs) {
157 //                    if (req.getRequest() == SelectionRequest.Request.HIDE) {
158 //                        if (req.isIncluded(manager, ctx)) {
159 //                            add = false;
160 //                            break;
161 //                        }
162 //                    }
163 //                }
164 //            }
165 //
166 //            if (add)
167 //                pruned.add(ctx);
168 //        }
169 //        return new PrunedChildrenResult(children.size(), pruned.toArray(INodeContext.NONE));
170
171     }
172
173     @Override
174     public String toString() {
175         return "ViewpointContributionsProcessor";
176     }
177
178 }