import org.simantics.db.layer0.adapter.impl.SharedOntologyImportAdvisor;
import org.simantics.db.layer0.adapter.impl.TrashBinRemover;
import org.simantics.db.layer0.internal.SimanticsInternal;
+import org.simantics.db.layer0.request.ActivateModel;
import org.simantics.db.layer0.util.ExternalDownloadBean;
import org.simantics.db.layer0.util.Layer0Utils;
import org.simantics.db.layer0.util.TGTransferableGraphSource;
+import org.simantics.db.request.Write;
import org.simantics.db.service.XSupport;
import org.simantics.graph.db.IImportAdvisor;
+import org.simantics.graph.db.ImportResult;
import org.simantics.graph.db.MissingDependencyException;
import org.simantics.graph.db.TransferableGraphException;
import org.simantics.graph.representation.Identity;
import org.simantics.graph.representation.TransferableGraph1;
import org.simantics.graph.representation.TransferableGraphUtils;
import org.simantics.layer0.Layer0;
+import org.simantics.operation.Layer0X;
+import org.simantics.simulation.ontology.SimulationResource;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.datastructures.collections.CollectionUtils;
// return getTG(session, state, true, false);
// }
- public static void clearTempResource(Session session, final Resource resource) {
- session.asyncRequest(new WriteRequest() {
-
- @Override
- public void perform(WriteGraph graph) throws DatabaseException {
- graph.deny(resource, Layer0.getInstance(graph).PartOf);
- }
+ public static void clearTempResource(Session session, Resource resource) {
+ session.asyncRequest((Write) graph -> {
+ graph.deny(resource, Layer0.getInstance(graph).PartOf);
});
}
+ /**
+ * Activate the imported resource, if there are no other active models and the resource is a Model.
+ */
+ private static void activateIfNoActiveModel(WriteGraph graph, Resource root, Resource parent) throws DatabaseException {
+ Layer0X L0X = Layer0X.getInstance(graph);
+ SimulationResource SIMU = SimulationResource.getInstance(graph);
+ if (!graph.hasStatement(parent, L0X.Activates) && graph.isInstanceOf(root, SIMU.Model)) {
+ new ActivateModel(parent, root).perform(graph);
+ }
+ }
+
public static Collection<Resource> importTo(IProgressMonitor monitor, Session session, MigrationState state, final Resource parent, final IImportAdvisor advisor) throws DatabaseException, TransferableGraphException {
final Resource resource = getResource(monitor, session, state);
- final ArrayList<Resource> result = new ArrayList<Resource>();
+ final ArrayList<Resource> result = new ArrayList<>();
if(resource != null) {
session.syncRequest(new WriteRequest() {
if(version != null) {
VersionMap map = graph.syncRequest(new VersionMapRequest(parent));
if(map.contains(baseName, version)) {
- String newName = graph.syncRequest(new FreshEscapedName(parent, Layer0.getInstance(graph).ConsistsOf, baseName));
+ String newName = graph.syncRequest(new FreshEscapedName(parent, L0.ConsistsOf, baseName));
graph.claimLiteral(root, L0.HasName, newName + "@1", Bindings.STRING);
}
} else {
- String newName = graph.syncRequest(new FreshEscapedName(parent, Layer0.getInstance(graph).ConsistsOf, baseName));
+ String newName = graph.syncRequest(new FreshEscapedName(parent, L0.ConsistsOf, baseName));
if(!newName.equals(baseName)) {
graph.claimLiteral(root, L0.HasName, newName, Bindings.STRING);
}
graph.deny(root, L0.PartOf);
graph.claim(root, L0.PartOf, parent);
+ if (Boolean.TRUE.equals( state.getProperty(MigrationKeys.ACTIVATE_ROOT_IF_NONE_ACTIVE) )) {
+ activateIfNoActiveModel(graph, root, parent);
+ }
+
CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
graph.addMetadata(cm.add("Imported " + graph.getURI(root) + ", resource " + root));
}
- @SuppressWarnings("deprecation")
public static Collection<MigrationStep> getMigrationSteps(DataContainer header) throws DatabaseException {
return SimanticsInternal.sync(new BinaryRead<String,Integer,Collection<MigrationStep>>(header.format, header.version) {
public Collection<MigrationStep> perform(ReadGraph graph) throws DatabaseException {
Layer0 L0 = Layer0.getInstance(graph);
- ArrayList<Pair<Double,MigrationStep>> steps = new ArrayList<Pair<Double,MigrationStep>>();
+ ArrayList<Pair<Double,MigrationStep>> steps = new ArrayList<>();
Instances query = graph.adapt(L0.Migration, Instances.class);
- Set<Resource> migrations = new HashSet<Resource>();
+ Set<Resource> migrations = new HashSet<>();
for(Resource ontology : Layer0Utils.listOntologies(graph)) {
migrations.addAll(Layer0Utils.sortByCluster(graph, query.find(graph, ontology)));
}
return t != null ? t : defaultValue;
}
- public static Resource importSharedOntology(Session session, TransferableGraph1 tg, boolean published) throws DatabaseException {
+ public static MigratedImportResult importSharedOntology(Session session, TransferableGraph1 tg, boolean published) throws DatabaseException {
return importSharedOntology(null, session, tg, published);
}
- public static Resource importSharedOntology(IProgressMonitor monitor, Session session, TransferableGraph1 tg, boolean published) throws DatabaseException {
+ public static MigratedImportResult importSharedOntology(IProgressMonitor monitor, Session session, TransferableGraph1 tg, boolean published) throws DatabaseException {
if(monitor == null) monitor = new NullProgressMonitor();
Collection<Identity> roots = TransferableGraphUtils.getRoots(tg);
if(roots.size() == 1) {
try {
-
TGTransferableGraphSource tgSource = new TGTransferableGraphSource(tg);
SharedOntologyImportAdvisor advisor = new SharedOntologyImportAdvisor(published);
state.setProperty(MigrationStateKeys.PROGRESS_MONITOR, monitor);
state.setProperty(MigrationStateKeys.CURRENT_DATA_CONTAINER, new DataContainer("sharedLibrary", 1, new Variant(TransferableGraph1.BINDING, tg)));
- return MigrationUtils.importMigrated(monitor, session, null, state, advisor, null);
-
+ MigrationUtils.importMigrated(monitor, session, null, state, advisor, null);
+
+ Collection<Resource> resultRoots = state.getProperty(MigrationStateKeys.CURRENT_ROOT_RESOURCES);
+ ImportResult result = state.getProperty(MigrationStateKeys.IMPORT_RESULT);
+ return new MigratedImportResult(resultRoots, result);
} catch (TransferableGraphException e) {
throw new DatabaseException(e);
} catch (MissingDependencyException e) {