]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/templates/ListTemplate.java
e30b1a5f0fea9e9c8b2e38ad4fab79db5294fca3
[simantics/platform.git] / bundles / org.simantics.graph.compiler / src / org / simantics / graph / compiler / internal / templates / ListTemplate.java
1 package org.simantics.graph.compiler.internal.templates;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import org.simantics.graph.compiler.ExternalFileLoader;\r
6 import org.simantics.graph.query.IGraph;\r
7 import org.simantics.graph.query.Paths;\r
8 import org.simantics.graph.store.GraphStore;\r
9 import org.simantics.ltk.Problem;\r
10 \r
11 public enum ListTemplate implements ITemplate {\r
12         \r
13         INSTANCE;\r
14         \r
15         @Override\r
16         public void apply(IGraph graph, GraphStore store,\r
17                         int[] parameters, ExternalFileLoader fileLoader, Collection<Problem> problems) {\r
18                 createList(graph.getPaths(), store, parameters);\r
19         }\r
20         \r
21         public static void createList(Paths paths, GraphStore store, int[] parameters) {\r
22             int InstanceOf = store.identities.createPathToId(paths.InstanceOf);\r
23                 int Entry = store.identities.createPathToId(paths.List_Entry);\r
24                 int Next = store.identities.createPathToId(paths.List_Next);\r
25                 int Element = store.identities.createPathToId(paths.List_Element);\r
26 \r
27                 int oldEntry = parameters[0];           \r
28                 for(int i=1;i<parameters.length;++i) {\r
29                     int newEntry = store.identities.newResource();\r
30                     store.statements.add(newEntry, InstanceOf, Entry);\r
31                     store.statements.add(oldEntry, Next, newEntry);                 \r
32                     store.statements.add(newEntry, Element, parameters[i]);\r
33                     oldEntry = newEntry;\r
34                 }\r
35                 store.statements.add(oldEntry, Next, parameters[0]);\r
36         }\r
37 \r
38 }\r
39 \r