1 package org.simantics.modeling.migration;
5 import org.eclipse.core.runtime.IProgressMonitor;
6 import org.simantics.db.Resource;
7 import org.simantics.db.Session;
8 import org.simantics.db.Statement;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.CommentMetadata;
11 import org.simantics.db.common.request.DelayedWriteRequest;
12 import org.simantics.db.common.request.WriteRequest;
13 import org.simantics.db.exception.DatabaseException;
14 import org.simantics.db.layer0.migration.MigrationState;
15 import org.simantics.db.layer0.migration.MigrationStep;
16 import org.simantics.db.layer0.migration.MigrationUtils;
17 import org.simantics.db.layer0.util.Layer0Utils;
18 import org.simantics.db.layer0.util.RemoverUtil;
19 import org.simantics.diagram.stubs.DiagramResource;
20 import org.simantics.layer0.Layer0;
21 import org.simantics.modeling.ModelingUtils;
22 import org.simantics.utils.logging.TimeLogger;
24 public class LayerCleanupMigrationStep implements MigrationStep {
27 public void applyTo(final IProgressMonitor monitor, Session session, MigrationState state) throws DatabaseException {
29 TimeLogger.log("LayerCleanupMigrationStep");
31 final Resource indexRoot = MigrationUtils.getResource(monitor, session, state);
32 if(indexRoot == null) return;
34 monitor.setTaskName("Cleanup layers migration - remove layer assignments");
36 session.sync(new DelayedWriteRequest() {
39 public void perform(WriteGraph graph) throws DatabaseException {
41 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
43 Layer0 L0 = Layer0.getInstance(graph);
44 DiagramResource DIA = DiagramResource.getInstance(graph);
46 for(Resource model : graph.getObjects(indexRoot, L0.ConsistsOf)) {
48 List<Resource> elements = ModelingUtils.searchByType(graph, model, DIA.Element);
49 for(Resource element : Layer0Utils.sortByCluster(graph, elements)) {
50 for(Statement stm : graph.getStatements(element, DIA.IsFocusable))
52 for(Statement stm : graph.getStatements(element, DIA.IsVisible))
58 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
59 graph.addMetadata(cm.add("Removing deprecated layer assignments from the model."));
65 monitor.setTaskName("Cleanup layers migration - remove layers");
67 session.sync(new WriteRequest() {
71 public void perform(WriteGraph graph) throws DatabaseException {
73 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
75 Layer0 L0 = Layer0.getInstance(graph);
76 DiagramResource DIA = DiagramResource.getInstance(graph);
78 for(Resource model : graph.getObjects(indexRoot, L0.ConsistsOf)) {
80 for(Resource diagram : ModelingUtils.searchByTypeShallow(graph, model, DIA.Composite)) {
81 for(Resource layer : graph.getObjects(diagram, DIA.HasLayer)) {
82 if(!graph.isImmutable(layer))
83 RemoverUtil.remove(graph, layer);
89 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
90 graph.addMetadata(cm.add("Removing deprecated layers from the model."));
96 TimeLogger.log("LayerCleanupMigrationStep done");