X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2FBuiltinKeys.java;fp=bundles%2Forg.simantics.browsing.ui%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2FBuiltinKeys.java;h=c8792c6424be410be079deb0e5006c24a954bfc2;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/BuiltinKeys.java b/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/BuiltinKeys.java new file mode 100644 index 000000000..c8792c642 --- /dev/null +++ b/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/BuiltinKeys.java @@ -0,0 +1,527 @@ +/******************************************************************************* + * 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; + +import java.util.Collection; + +import org.simantics.browsing.ui.NodeContext.ConstantKey; +import org.simantics.browsing.ui.NodeContext.ParametrizedPrimitiveQueryKey; +import org.simantics.browsing.ui.NodeContext.PrimitiveQueryKey; +import org.simantics.browsing.ui.NodeContext.QueryKey; +import org.simantics.browsing.ui.content.CheckedStateFactory; +import org.simantics.browsing.ui.content.ComparableContext; +import org.simantics.browsing.ui.content.ComparableContextFactory; +import org.simantics.browsing.ui.content.ImageDecorator; +import org.simantics.browsing.ui.content.ImageDecoratorFactory; +import org.simantics.browsing.ui.content.Imager; +import org.simantics.browsing.ui.content.ImagerFactory; +import org.simantics.browsing.ui.content.LabelDecorator; +import org.simantics.browsing.ui.content.LabelDecoratorFactory; +import org.simantics.browsing.ui.content.Labeler; +import org.simantics.browsing.ui.content.LabelerFactory; +import org.simantics.browsing.ui.content.PrunedChildrenResult; +import org.simantics.browsing.ui.content.Viewpoint; +import org.simantics.browsing.ui.content.ViewpointContribution; +import org.simantics.browsing.ui.content.ViewpointContributionFactory; +import org.simantics.browsing.ui.content.ViewpointFactory; + +/** + * Keys and key classes for different queries and graph explorer nodes. + * + *

+ * QueryKey instances are for identifying normal queries to be + * performed. Also {@link NodeQueryProcessor}s, i.e. the query implementations, + * use them to identify the query that they are capable of answering (see + * {@link NodeQueryProcessor#getIdentifier()} method). + *

+ * + *

+ * Both PrimitiveQueryKey instances and + * ParametrizedPrimitiveQueryKey classes are used for identifying + * queries that are performed by {@link PrimitiveQueryProcessor}s. + *

+ * + * TODO: specify for every query key or query key class: description, query dependencies, query return value + */ +public interface BuiltinKeys { + + public static class InputKey implements ConstantKey { + private InputKey() {} + @Override + public String toString() { + return "INPUT"; + } + }; + + /** + * This key is used for storing the main input object into a + * {@link NodeContext}. + * + *

+ * See org.simantics.browsing.ui.common.NodeContextBuilder and + * org.simantics.browsing.ui.common.NodeContextUtil for ways of + * creating NodeContext instances. + */ + public static final ConstantKey INPUT = new InputKey(); + + public static class UIContextKey implements ConstantKey { + private UIContextKey() {} + @Override + public String toString() { + return "UI_CONTEXT"; + } + }; + + /** + * This key is used for storing the node-specific ui context into a + * {@link NodeContext}. + * + *

+ * See org.simantics.browsing.ui.common.NodeContextBuilder and + * org.simantics.browsing.ui.common.NodeContextUtil for ways of + * creating NodeContext instances. + */ + public static final ConstantKey UI_CONTEXT = new UIContextKey(); + + public static class BrowseContextKey implements ConstantKey { + private BrowseContextKey() {} + @Override + public String toString() { + return "BROWSE_CONTEXT"; + } + }; + + /** + * This key is used for storing the node-specific BrowseContext input object into a + * {@link NodeContext}. + * + *

+ * See org.simantics.browsing.ui.common.NodeContextBuilder and + * org.simantics.browsing.ui.common.NodeContextUtil for ways of + * creating NodeContext instances. + */ + public static final ConstantKey BROWSE_CONTEXT = new BrowseContextKey(); + + public static class ActionBrowseContextKey implements ConstantKey { + private ActionBrowseContextKey() {} + @Override + public String toString() { + return "ACTION_BROWSE_CONTEXT"; + } + }; + + /** + * This key is used for storing the node-specific ActionBrowseContext input + * object into a {@link NodeContext}. + * + *

+ * See org.simantics.browsing.ui.common.NodeContextBuilder and + * org.simantics.browsing.ui.common.NodeContextUtil for ways of + * creating NodeContext instances. + */ + public static final ConstantKey ACTION_BROWSE_CONTEXT = new ActionBrowseContextKey(); + + public static class FilterKey implements ConstantKey { + private FilterKey() {} + @Override + public String toString() { + return "FILTER"; + } + }; + + /** + * This key is used for storing the filter string object into it a + * {@link NodeContext}. The value is used by primitive query viewpoints to + * perform pruning. + * + *

+ * See org.simantics.browsing.ui.common.NodeContextBuilder and + * org.simantics.browsing.ui.common.NodeContextUtil for ways of + * creating NodeContext instances. + */ + public static final ConstantKey FILTER = new FilterKey(); + + public static final QueryKey SELECTED_VIEWPOINT = new QueryKey() { + @Override + public String toString() { + return "SELECTED_VIEWPOINT"; + } + }; + + public static final QueryKey ACTIVE_FILTER = new QueryKey() { + @Override + public String toString() { + return "ACTIVE_FILTER"; + } + }; + + public static final QueryKey> VIEWPOINT_CONTRIBUTIONS = new QueryKey>() { + @Override + public String toString() { + return "VIEWPOINT_CONTRIBUTIONS"; + } + }; + + /** + * A query for all available viewpoint factories for the current input. + *

+ * Depends on: {@link #INPUT} + *

+ * Returns: a non-null collection + */ + public static final QueryKey> VIEWPOINT_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "VIEWPOINT_FACTORIES"; + } + }; + + public static class SelectedViewpointFactoryKey extends ParametrizedPrimitiveQueryKey { + public SelectedViewpointFactoryKey(Collection factories) { + super(factories); + assert factories != null; + } + @Override + public String getKeyName() { + return "SELECTED_VIEWPOINT_FACTORY"; + } + }; + + public static class ViewpointKey extends ParametrizedPrimitiveQueryKey { + public ViewpointKey(ViewpointFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "VIEWPOINT"; + } + }; + + public static class ViewpointContributionKey extends ParametrizedPrimitiveQueryKey { + public ViewpointContributionKey(ViewpointContributionFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "VIEWPOINT_CONTRIBUTION"; + } + }; + + /** + * Used by GraphExplorer.setTextAndImage. + */ + public static final QueryKey> LABEL_DECORATOR_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "LABEL_DECORATOR_FACTORIES"; + } + }; + /** + * Used by GraphExplorer.setTextAndImage. + */ + public static final QueryKey> LABEL_DECORATORS = new QueryKey>() { + @Override + public String toString() { + return "LABEL_DECORATORS"; + } + }; + /** + * Used by GraphExplorer.setTextAndImage. + */ + public static final QueryKey> IMAGE_DECORATOR_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "IMAGE_DECORATOR_FACTORIES"; + } + }; + /** + * Used by GraphExplorer.setTextAndImage. + */ + public static final QueryKey> IMAGE_DECORATORS = new QueryKey>() { + @Override + public String toString() { + return "IMAGE_DECORATORS"; + } + }; + + public static final QueryKey SELECTED_LABELER = new QueryKey() { + @Override + public String toString() { + return "SELECTED_LABELER"; + } + }; + + public static final QueryKey SELECTED_IMAGER = new QueryKey() { + @Override + public String toString() { + return "SELECTED_IMAGER"; + } + }; + + public static final QueryKey> SELECTED_LABEL_DECORATOR_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "SELECTED_LABEL_DECORATOR_FACTORIES"; + } + }; + + public static final QueryKey> SELECTED_IMAGE_DECORATOR_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "SELECTED_IMAGE_DECORATOR_FACTORIES"; + } + }; + + /** + * A query for all available labeler factories for the current input. + *

+ * Depends on: {@link #INPUT} + *

+ * Returns: a non-null collection + */ + public static final QueryKey> LABELER_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "LABELER_FACTORIES"; + } + }; + + /** + * A query for all available imager factories for the current input. + *

+ * Depends on: {@link #INPUT} + *

+ * Returns: a non-null collection + */ + public static final QueryKey> IMAGER_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "IMAGER_FACTORIES"; + } + }; + + public static class LabelerKey extends ParametrizedPrimitiveQueryKey { + public LabelerKey(LabelerFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "LABELER"; + } + }; + + public static class CheckedStateKey extends ParametrizedPrimitiveQueryKey { + public CheckedStateKey(CheckedStateFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "CHECK_STATE"; + } + }; + + public static class LabelDecoratorKey extends ParametrizedPrimitiveQueryKey { + public LabelDecoratorKey(LabelDecoratorFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "LABEL_DECORATOR"; + } + }; + + public static class ImagerKey extends ParametrizedPrimitiveQueryKey { + public ImagerKey(ImagerFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "IMAGER"; + } + }; + + public static class ImageDecoratorKey extends ParametrizedPrimitiveQueryKey { + public ImageDecoratorKey(ImageDecoratorFactory factory) { + super(factory); + assert factory != null; + } + @Override + public String getKeyName() { + return "IMAGE_DECORATOR"; + } + }; + + /** + * A query that returns a collection of {@link SelectionRequest}s based on + * the current input. The selection requests are used to dictate whether a + * child INodeContext of the input INodeContext gets filtered out from the + * result of the {@link #PRUNED_CHILDREN} query. + * + *

+ * The query is free to return null if there are no filters for + * the query input. + *

+ */ + public static final PrimitiveQueryKey> SELECTION_REQUESTS = new PrimitiveQueryKey>() { + @Override + public String toString() { + return "SELECTION_REQUEST"; + } + }; + + //------------------------------------------------------------------------ + + /** + * A query that requests for the currently selected viewpoint of a node + * context, gets all of its children from the viewpoint and prunes the set + * of children based on active filters (selection requests). + *

+ * Depends on: {@link #SELECTED_VIEWPOINT}, {@link #SELECTION_REQUESTS} + *

+ * Returns: A {@link PrunedChildrenResult} which contains the pruned set of + * children as INodeContext[] and the original amount of children before + * pruning them. + */ + public static final QueryKey PRUNED_CHILDREN = new QueryKey() { + @Override + public String toString() { + return "PRUNED_CHILDREN"; + } + }; + + /** + * A query to transform INodeContext's into ComparableContexts that can be + * sorted. + *

+ * Depends on: {@link #PRUNED_CHILDREN} + *

+ * Returns: ComparableContext[] of the same size as the input or + * null if no selected ComparableFactory could be discovered + * which indicates that child nodes cannot be sorted. + */ + public static final QueryKey COMPARABLE_CHILDREN = new QueryKey() { + @Override + public String toString() { + return "COMPARABLE_CHILDREN"; + } + }; + + /** + * A query for all available comparable factories for the current input. + *

+ * Depends on: {@link #INPUT} + *

+ * Returns: a non-null collection + */ + public static final QueryKey> COMPARABLE_FACTORIES = new QueryKey>() { + @Override + public String toString() { + return "COMPARABLE_FACTORIES"; + } + }; + + public static class SelectedComparableFactoryKey extends ParametrizedPrimitiveQueryKey { + public SelectedComparableFactoryKey(Collection factories) { + super(factories); + assert factories != null; + } + @Override + public String getKeyName() { + return "SELECTED_COMPARABLE_FACTORY"; + } + } + + /** + * Returns the final child nodes for a node after pruning and sorting them. + * If you need to discover the set of children for a node you should use + * {@link BuiltinKeys#PRUNED_CHILDREN} instead if you don't need the + * sorting. To get the non-pruned set of all children of a node + *

+ * Depends on: {@link BuiltinKeys#COMPARABLE_CHILDREN}, + * {@link BuiltinKeys#PRUNED_CHILDREN} + *

+ * Returns: an array of {@link NodeContext}s. + */ + public static final QueryKey FINAL_CHILDREN = new QueryKey() { + @Override + public String toString() { + return "FINAL_CHILDREN"; + } + }; + + /** + * Returns whether a node is expanded in the UI or not. + *

+ * Returns: {@link Boolean#TRUE} if expanded, {@link Boolean#FALSE} if not. + */ + public static final PrimitiveQueryKey IS_EXPANDED = new PrimitiveQueryKey() { + @Override + public String toString() { + return "IS_EXPANDED"; + } + }; + + /** + * Tells whether a node is "checked" in the UI or not. This only takes + * effect if the GraphExplorer was created with support for checkedness + * visualisation. + *

+ * Returns: {@link CheckedState} + */ + public static final QueryKey IS_CHECKED = new QueryKey() { + @Override + public String toString() { + return "IS_CHECKED"; + } + }; + + /** + * Returns how many children should maximally be shown for a node. By + * default the set of shown children is pruned if there are too many of them + * to be shown. + *

+ * Returns: + *

    + *
  • 0 < x ≤ {@value Integer#MAX_VALUE} to tell the maximum amount of + * children to show
  • + *
  • null indicates don't care
  • + *
+ * May not return < 0. + */ + public static final PrimitiveQueryKey SHOW_MAX_CHILDREN = new PrimitiveQueryKey() { + @Override + public String toString() { + return "SHOW_MAX_CHILDREN"; + } + }; + + public static class IsRootKey implements ConstantKey { + private IsRootKey() {} + @Override + public String toString() { + return "IS_ROOT"; + } + }; + + /** + * Set to {@link Boolean#TRUE} for a NodeContext that describes the root + * input of a {@link GraphExplorer}. + */ + public static final ConstantKey IS_ROOT = new IsRootKey(); + +}