/******************************************************************************* * 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(); }