X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.selectionview%2Fsrc%2Forg%2Fsimantics%2Fselectionview%2FStandardSelectionProcessor.java;h=5d770b4fe5172baeb5a7628ca0002a6b21cf853d;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=ccf4eeb9ff79391a64f5e8be25f2fc24d9cbe85f;hpb=86adc86522decdf79259743cde5ec3688af3d908;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardSelectionProcessor.java b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardSelectionProcessor.java index ccf4eeb9f..5d770b4fe 100644 --- a/bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardSelectionProcessor.java +++ b/bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardSelectionProcessor.java @@ -1,156 +1,156 @@ -package org.simantics.selectionview; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import org.simantics.Simantics; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.common.request.PossibleIndexRoot; -import org.simantics.db.common.utils.Functions; -import org.simantics.db.common.utils.NameUtils; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.SelectionHints; -import org.simantics.db.layer0.adapter.Instances; -import org.simantics.db.layer0.request.VariableIndexRoot; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.db.layer0.variable.Variables; -import org.simantics.layer0.Layer0; -import org.simantics.ui.selection.WorkbenchSelectionUtils; -import org.simantics.utils.ui.ISelectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class StandardSelectionProcessor implements SelectionProcessor { - private static final Logger LOGGER = LoggerFactory.getLogger(StandardSelectionProcessor.class); - - private static Resource getIndexRoot(ReadGraph graph, Object selection) throws DatabaseException { - - Variable variable = WorkbenchSelectionUtils.getPossibleVariable(graph, selection); - if (variable != null) { - return graph.sync(new VariableIndexRoot(variable)); - } - - variable = ISelectionUtils.filterSingleSelection(selection, Variable.class); - if (variable != null) { - return graph.sync(new VariableIndexRoot(variable)); - } - - Resource indexRoot = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MODEL, Resource.class, false); - if (indexRoot == null) { - Resource r = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, Resource.class); - if (r != null) - indexRoot = graph.sync(new PossibleIndexRoot(r)); - } - - return indexRoot != null && graph.isInstanceOf(indexRoot, Layer0.getInstance(graph).IndexRoot) ? indexRoot : null; - } - - @Override - public Collection process(Object selection, ReadGraph graph) { - return processStatic(selection, graph); - } - - public static Collection processStatic(Object selection, ReadGraph graph) { - - try { - - SelectionViewResources SEL = SelectionViewResources.getInstance(graph); - Instances contributionFinder = graph.adapt(SEL.TabContribution, Instances.class); - Instances transformationFinder = graph.adapt(SEL.SelectionTransformation, Instances.class); - - ArrayList> contributions = new ArrayList>(); - - Resource index = getIndexRoot(graph, selection); - if(index != null) { - - for(Resource r : contributionFinder.find(graph, index)) { - TabContribution contribution = graph.adapt(r, TabContribution.class); - contributions.add(contribution); - if(DebugPolicy.DEBUG) System.err.println("-contribution " + graph.getURI(r)); - } - - ArrayList transforms = new ArrayList(); - transforms.addAll(transformationFinder.find(graph, index)); - if(DebugPolicy.DEBUG) { - for(Resource r : transforms) - System.err.println("-transform " + NameUtils.getSafeLabel(graph, r)); - } - - HashSet inputs = new HashSet(); - HashSet newInputs = new HashSet(); - inputs.add(selection); - boolean changed = true; - while(changed) { - for(Resource tr : transforms) { - for(Object input : inputs) { - try { - Object newInput = Functions.exec(graph, tr, graph, input); - if(newInput != null) - newInputs.add(newInput); - } catch (DatabaseException e) { - } - } - } - changed = inputs.addAll(newInputs); - newInputs.clear(); - } - - - if(DebugPolicy.DEBUG) { - for(Object o : inputs) - System.err.println("-input " + inputName(graph, o)); - } - - Set result = new HashSet(); - for(TabContribution c : contributions) { - for(Object input : inputs) { - try { - if(DebugPolicy.DEBUG) { - System.err.println("contribution: " + c); - System.err.println("->input: " + input); - System.err.println("->input name: " + inputName(graph, input)); - } - if (c.accept(graph, input)) - c.contribute(graph, input, result); - } catch (Exception e) { - LOGGER.error("Selection view tab contribution failed.", e); - } - } - } - - if(DebugPolicy.DEBUG) { - System.err.println("result: " + result); - } - - return result; - - } - - - } catch (DatabaseException e) { - - e.printStackTrace(); - - } - - return Collections.emptyList(); - - } - - private static String inputName(ReadGraph graph, Object o) throws DatabaseException { - if(o instanceof Resource) { - return "Resource: " + NameUtils.getURIOrSafeNameInternal(graph, (Resource)o); - } else if(o instanceof Variable) { - return "Variable: " + ((Variable)o).getURI(graph) + " " + NameUtils.getSafeLabel(graph, (Resource)((Variable)o).getPossiblePropertyValue(graph, Variables.TYPE)); - } else if(o instanceof SelectionInput) { - return "SelectionInput: " + o.toString(); - } else { - return "Object(" + o.getClass().getSimpleName() + "): " + o.toString(); - } - } - -} +package org.simantics.selectionview; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.PossibleIndexRoot; +import org.simantics.db.common.utils.Functions; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.SelectionHints; +import org.simantics.db.layer0.adapter.Instances; +import org.simantics.db.layer0.request.VariableIndexRoot; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.layer0.Layer0; +import org.simantics.ui.selection.WorkbenchSelectionUtils; +import org.simantics.utils.ui.ISelectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class StandardSelectionProcessor implements SelectionProcessor { + private static final Logger LOGGER = LoggerFactory.getLogger(StandardSelectionProcessor.class); + + private static Resource getIndexRoot(ReadGraph graph, Object selection) throws DatabaseException { + + Variable variable = WorkbenchSelectionUtils.getPossibleVariable(graph, selection); + if (variable != null) { + return graph.sync(new VariableIndexRoot(variable)); + } + + variable = ISelectionUtils.filterSingleSelection(selection, Variable.class); + if (variable != null) { + return graph.sync(new VariableIndexRoot(variable)); + } + + Resource indexRoot = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MODEL, Resource.class, false); + if (indexRoot == null) { + Resource r = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, Resource.class); + if (r != null) + indexRoot = graph.sync(new PossibleIndexRoot(r)); + } + + return indexRoot != null && graph.isInstanceOf(indexRoot, Layer0.getInstance(graph).IndexRoot) ? indexRoot : null; + } + + @Override + public Collection process(Object selection, ReadGraph graph) { + return processStatic(selection, graph); + } + + public static Collection processStatic(Object selection, ReadGraph graph) { + + try { + + SelectionViewResources SEL = SelectionViewResources.getInstance(graph); + Instances contributionFinder = graph.adapt(SEL.TabContribution, Instances.class); + Instances transformationFinder = graph.adapt(SEL.SelectionTransformation, Instances.class); + + ArrayList> contributions = new ArrayList>(); + + Resource index = getIndexRoot(graph, selection); + if(index != null) { + + for(Resource r : contributionFinder.find(graph, index)) { + TabContribution contribution = graph.adapt(r, TabContribution.class); + contributions.add(contribution); + if(DebugPolicy.DEBUG) System.err.println("-contribution " + graph.getURI(r)); + } + + ArrayList transforms = new ArrayList(); + transforms.addAll(transformationFinder.find(graph, index)); + if(DebugPolicy.DEBUG) { + for(Resource r : transforms) + System.err.println("-transform " + NameUtils.getSafeLabel(graph, r)); + } + + HashSet inputs = new HashSet(); + HashSet newInputs = new HashSet(); + inputs.add(selection); + boolean changed = true; + while(changed) { + for(Resource tr : transforms) { + for(Object input : inputs) { + try { + Object newInput = Functions.exec(graph, tr, graph, input); + if(newInput != null) + newInputs.add(newInput); + } catch (DatabaseException e) { + } + } + } + changed = inputs.addAll(newInputs); + newInputs.clear(); + } + + + if(DebugPolicy.DEBUG) { + for(Object o : inputs) + System.err.println("-input " + inputName(graph, o)); + } + + Set result = new HashSet(); + for(TabContribution c : contributions) { + for(Object input : inputs) { + try { + if(DebugPolicy.DEBUG) { + System.err.println("contribution: " + c); + System.err.println("->input: " + input); + System.err.println("->input name: " + inputName(graph, input)); + } + if (c.accept(graph, input)) + c.contribute(graph, input, result); + } catch (Exception e) { + LOGGER.error("Selection view tab contribution failed.", e); + } + } + } + + if(DebugPolicy.DEBUG) { + System.err.println("result: " + result); + } + + return result; + + } + + + } catch (DatabaseException e) { + + e.printStackTrace(); + + } + + return Collections.emptyList(); + + } + + private static String inputName(ReadGraph graph, Object o) throws DatabaseException { + if(o instanceof Resource) { + return "Resource: " + NameUtils.getURIOrSafeNameInternal(graph, (Resource)o); + } else if(o instanceof Variable) { + return "Variable: " + ((Variable)o).getURI(graph) + " " + NameUtils.getSafeLabel(graph, (Resource)((Variable)o).getPossiblePropertyValue(graph, Variables.TYPE)); + } else if(o instanceof SelectionInput) { + return "SelectionInput: " + o.toString(); + } else { + return "Object(" + o.getClass().getSimpleName() + "): " + o.toString(); + } + } + +}