]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/migration/LayerCleanupMigrationStep.java
LayerCleanupMigrationStep is too eager
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / migration / LayerCleanupMigrationStep.java
1 package org.simantics.modeling.migration;
2
3 import java.util.List;
4
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;
23
24 public class LayerCleanupMigrationStep implements MigrationStep {
25
26     @Override
27     public void applyTo(final IProgressMonitor monitor, Session session, MigrationState state) throws DatabaseException {
28         
29             TimeLogger.log("LayerCleanupMigrationStep");
30
31         final Resource indexRoot = MigrationUtils.getResource(monitor, session, state);
32         if(indexRoot == null) return;
33
34         monitor.setTaskName("Cleanup layers migration - remove layer assignments");
35
36         session.sync(new DelayedWriteRequest() {
37
38             @Override
39             public void perform(WriteGraph graph) throws DatabaseException {
40
41                 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
42
43                 Layer0 L0 = Layer0.getInstance(graph);
44                 DiagramResource DIA = DiagramResource.getInstance(graph);
45
46                 for(Resource model : graph.getObjects(indexRoot, L0.ConsistsOf)) {
47                         
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))
51                                         graph.deny(stm);
52                                 for(Statement stm : graph.getStatements(element, DIA.IsVisible))
53                                         graph.deny(stm);
54                         }
55                         
56                 }
57                 
58                 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
59                 graph.addMetadata(cm.add("Removing deprecated layer assignments from the model."));
60                 
61             }
62             
63         });
64
65         monitor.setTaskName("Cleanup layers migration - remove layers");
66         
67         session.sync(new WriteRequest() {
68
69                 
70             @Override
71             public void perform(WriteGraph graph) throws DatabaseException {
72
73                 Layer0Utils.setDependenciesIndexingDisabled(graph, true);
74
75                 Layer0 L0 = Layer0.getInstance(graph);
76                 DiagramResource DIA = DiagramResource.getInstance(graph);
77
78                 for(Resource model : graph.getObjects(indexRoot, L0.ConsistsOf)) {
79                         
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);
84                                 }
85                         }
86                         
87                 }
88                 
89                 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
90                 graph.addMetadata(cm.add("Removing deprecated layers from the model."));
91                 
92             }
93
94         });
95
96             TimeLogger.log("LayerCleanupMigrationStep done");
97
98     }
99
100 }