package org.simantics.selectionview; import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.scl.runtime.function.Function; import org.simantics.ui.selection.WorkbenchSelectionUtils; abstract public class AbstractVariableTabContribution extends AbstractTabContribution { public AbstractVariableTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException { super(graph, configuration); } @Override public boolean accept(ReadGraph graph, Object input) throws DatabaseException { if (!super.accept(graph, input)) return false; Variable variable = getPossibleVariable(graph, input); if (variable == null) return false; if(input instanceof SelectionInput) { SelectionViewResources SEL = SelectionViewResources.getInstance(graph); Variable configurationVariable = Variables.getVariable(graph, configuration); Function f = configurationVariable.getPossiblePropertyValue(graph, SEL.AbstractVariableTabContribution_testFunction); if(f != null) { Boolean pass = Simantics.applySCLRead(graph, f, variable); if(!pass) return false; } } else { return false; } return true; } final private Variable getPossibleVariable(ReadGraph graph, Object selection) throws DatabaseException { if(selection instanceof SelectionInput) { SelectionInput si = (SelectionInput)selection; if(si.getElements().size() == 1) { return WorkbenchSelectionUtils.getPossibleVariable(graph, si.getElements().iterator().next()); } } return null; } }