]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.profile/src/org/simantics/scenegraph/profile/request/AvailableProfiles.java
Merge branch 'feature/funcwrite'
[simantics/platform.git] / bundles / org.simantics.scenegraph.profile / src / org / simantics / scenegraph / profile / request / AvailableProfiles.java
1 package org.simantics.scenegraph.profile.request;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6
7 import org.simantics.databoard.Bindings;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.Resource;
10 import org.simantics.db.common.NamedResource;
11 import org.simantics.db.common.request.ResourceRead;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.db.layer0.adapter.Instances;
14 import org.simantics.diagram.stubs.DiagramResource;
15 import org.simantics.layer0.Layer0;
16
17 public class AvailableProfiles extends ResourceRead<List<NamedResource>>{
18
19         protected AvailableProfiles(Resource runtimeDiagram) {
20                 super(runtimeDiagram);
21         }
22
23         @Override
24         public List<NamedResource> perform(ReadGraph graph) throws DatabaseException {
25                 
26                   Layer0 L0 = Layer0.getInstance(graph);
27                 DiagramResource DIA = DiagramResource.getInstance(graph);
28
29                 String indexURI = graph.getPossibleRelatedValue(resource, DIA.RuntimeDiagram_HasModelURI);
30                 if (indexURI == null)
31                     return Collections.emptyList();
32
33                 Resource index = graph.getPossibleResource(indexURI);
34                 if (index == null)
35                     return Collections.emptyList();
36
37                 Instances query = graph.adapt(DIA.Profile, Instances.class);
38
39                 ArrayList<NamedResource> result = new ArrayList<>();
40                 for(Resource profile : query.find(graph, index)) {
41                         if(!graph.hasStatement(profile, L0.Abstract)) {
42                                 String name = graph.getRelatedValue(profile, L0.HasName, Bindings.STRING);
43                                 result.add(new NamedResource(name, profile));
44                         }
45                 }
46                 
47                 return result;
48                 
49         }
50
51 }