1 package org.simantics.modeling.export;
\r
3 import java.util.Collection;
\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
18 * Discovers all models in context ( session, project )
\r
20 * @author toni.kalajainen@semantum.fi
\r
22 public class DiscoverModels implements DiscoverAction {
\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
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
43 public Collection<String> discoverContent(ExportContext ctx, Collection<String> startLocations) throws ExportException {
\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