1 package org.simantics.spreadsheet.graph;
\r
3 import java.util.Collections;
\r
4 import java.util.HashMap;
\r
5 import java.util.List;
\r
6 import java.util.Map;
\r
8 import org.simantics.Simantics;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.db.layer0.adapter.Instances;
\r
13 import org.simantics.db.layer0.request.VariableRead;
\r
14 import org.simantics.db.layer0.variable.Variable;
\r
15 import org.simantics.db.layer0.variable.Variables;
\r
16 import org.simantics.scl.runtime.function.Function;
\r
17 import org.simantics.spreadsheet.resource.SpreadsheetResource;
\r
19 public class Sources extends VariableRead<Map<String,Variable>> {
\r
21 public Sources(Variable variable) {
\r
26 public Map<String,Variable> perform(ReadGraph graph) throws DatabaseException {
\r
28 SpreadsheetResource SHEET = SpreadsheetResource.getInstance(graph);
\r
29 Instances query = graph.adapt(SHEET.SourceContribution, Instances.class);
\r
30 Resource indexRoot = variable.getIndexRoot(graph);
\r
31 if(indexRoot == null) return Collections.emptyMap();
\r
33 Map<String,Variable> result = new HashMap<String,Variable>();
\r
34 for(Resource source : query.find(graph, indexRoot)) {
\r
36 Variable sv = Variables.getVariable(graph, source);
\r
37 @SuppressWarnings("rawtypes")
\r
38 Function f = sv.getPropertyValue(graph, SHEET.SourceContribution_function);
\r
39 List<Variable> in = Simantics.<List<Variable>>applySCLRead(graph, f, variable.getRepresents(graph));
\r
40 for(Variable var : in) {
\r
41 Function f2 = sv.getPropertyValue(graph, SHEET.SourceContribution_labeler);
\r
42 String key = Simantics.<String>applySCLRead(graph, f2, var);
\r
43 result.put(key, var);
\r