X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.common%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fcommon%2Fprocessors%2FDefaultViewpointContributionsProcessor.java;fp=bundles%2Forg.simantics.browsing.ui.common%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fcommon%2Fprocessors%2FDefaultViewpointContributionsProcessor.java;h=9747d0ebc508b30faeb6b45c4be465929a3bfff1;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java new file mode 100644 index 000000000..9747d0ebc --- /dev/null +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/processors/DefaultViewpointContributionsProcessor.java @@ -0,0 +1,178 @@ +/******************************************************************************* + * 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> { + + public static final Collection EMPTY = Collections.emptyList(); + + @Override + public QueryKey> getIdentifier() { + return BuiltinKeys.VIEWPOINT_CONTRIBUTIONS; + } + + private String extractFilterString(Collection 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 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 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 result = new ArrayList(); + 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 getContribution() { + ArrayList result = new ArrayList(); + 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 contributions = manager.query(context, BuiltinKeys.VIEWPOINT_CONTRIBUTIONS); +// if (contributions == null) +// return PrunedChildrenResult.EMPTY; +// +// HashSet children = new HashSet(); +// +// 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 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 pruned = new ArrayList(); +// 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"; + } + +} \ No newline at end of file