]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/export/DiscoverModels.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / export / DiscoverModels.java
1 package org.simantics.modeling.export;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import org.simantics.db.ReadGraph;\r
6 import org.simantics.db.common.utils.traverser.TraverseQueryBuilder;\r
7 import org.simantics.db.common.utils.traverser.TraverseResult;\r
8 import org.simantics.db.exception.DatabaseException;\r
9 import org.simantics.db.request.Read;\r
10 import org.simantics.export.core.ExportContext;\r
11 import org.simantics.export.core.error.ExportException;\r
12 import org.simantics.export.core.intf.DiscoverAction;\r
13 import org.simantics.export.core.util.ExportQueries;\r
14 import org.simantics.layer0.Layer0;\r
15 import org.simantics.simulation.ontology.SimulationResource;\r
16 \r
17 /**\r
18  * Discovers all models in context ( session, project )\r
19  *\r
20  * @author toni.kalajainen@semantum.fi\r
21  */\r
22 public class DiscoverModels implements DiscoverAction {\r
23 \r
24         public Read<Collection<String>> discoverRequest(\r
25                         final Collection<String> startLocations) throws ExportException {\r
26                 return new Read<Collection<String>>() {\r
27                         public Collection<String> perform(ReadGraph graph) throws DatabaseException {\r
28                                 \r
29                                 Layer0 L0 = Layer0.getInstance(graph);\r
30                                 SimulationResource SIM = SimulationResource.getInstance(graph);  \r
31                                 TraverseQueryBuilder builder = new TraverseQueryBuilder();\r
32                                 builder.setStartResources( graph.syncRequest( ExportQueries.toResources(startLocations) ) );\r
33                                 builder.followRelation( L0.ConsistsOf );\r
34                                 builder.followAndReturnInstanceOf( SIM.Model );\r
35                                 TraverseResult traverseResult = graph.syncRequest( builder.build() );\r
36                                 return graph.syncRequest( ExportQueries.toUris( traverseResult.result ) );\r
37                         }\r
38                         \r
39                 };\r
40         }\r
41 \r
42         @Override\r
43         public Collection<String> discoverContent(ExportContext ctx, Collection<String> startLocations) throws ExportException {                \r
44                 try {\r
45                         return ctx.session.syncRequest( discoverRequest(startLocations) );\r
46                 } catch (DatabaseException e) {\r
47                         if ( e.getCause() instanceof ExportException ) throw (ExportException) e.getCause();\r
48                         throw new ExportException( e );\r
49                 }\r
50         }\r
51         \r
52 \r
53 }\r