]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Update module graph structure, deny deleting modules in use under model 01/4401/3
authorJani Mäkinen <jani.makinen@semantum.fi>
Mon, 24 Aug 2020 14:03:57 +0000 (17:03 +0300)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Tue, 25 Aug 2020 10:58:35 +0000 (10:58 +0000)
gitlab #52

Change-Id: I16df1a66dddb0a7fc039d739b73a3c5616066e48

bundles/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph
bundles/org.simantics.sysdyn.ui/adapters.xml
bundles/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewModuleTypeAction.java
bundles/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/remove/ModuleSymbolRemover.java

index 8037feceefda00def6376db5150a0bfe73e105a2..8ed1e078cca36c198ed14c29a3db597316b04b18 100644 (file)
@@ -215,7 +215,9 @@ SYSDYN.Module <T SYSDYN.Component
     >-- SYSDYN.Module.redeclaration --> SYSDYN.Redeclaration  <R L0.IsComposedOf
     >-- SYSDYN.Module.parameterOverride --> SYSDYN.Module.ParameterOverride <R L0.IsComposedOf
 
-SYSDYN.ModuleSymbol <T DIA.FontProvider <T DIA.ColorProvider
+SYSDYN.ModuleSymbolType <T L0.Entity
+
+SYSDYN.ModuleSymbol <T DIA.FontProvider <T DIA.ColorProvider : SYSDYN.ModuleSymbolType
     @MOD.defSymbol "ModuleSymbol" SYSDYN.Module
     STR.IsDefinedBy _ : DIA.Composite
         @L0.orderedSet  
index 32864ef31270e82a8b795be058f09c2c9c7ec64d..5d2745762277755c6bba6a88a880be6da3b55385 100644 (file)
     </target>     
   
     <target interface="org.simantics.db.layer0.adapter.Remover">
-        <type uri="http://www.simantics.org/Sysdyn-0.0/ModuleSymbol"
+        <type uri="http://www.simantics.org/Sysdyn-0.0/ModuleSymbolType"
             class="org.simantics.sysdyn.ui.browser.actions.remove.ModuleSymbolRemover">
             <this />
         </type>
index ac5243806ba9868e75d95e69d9cdc87debd941f1..20cae87da82be11c5228576eafb9977da540a97d 100644 (file)
@@ -94,7 +94,6 @@ public class NewModuleTypeAction implements ActionFactory{
                         g.claimLiteral(moduleSymbol, l0.HasName, name + " Symbol");
                         g.claimLiteral(moduleSymbol, l0.HasLabel, name + " Symbol");
                         g.claim(moduleSymbol, l0.Inherits, sr.ModuleSymbol);
-                        g.claim(moduleSymbol, l0.InstanceOf, sr.ModuleSymbol);
                         g.claim(moduleSymbol, mr.SymbolToComponentType, moduleType);
                         g.claim(moduleSymbol, l0.PartOf, moduleType);
 
index 1b5becef0655ad937ebfd5746ef1232dd8e9e026..4f718fe5829dcb97d8c3c1fd54585a55098459c6 100644 (file)
  *******************************************************************************/
 package org.simantics.sysdyn.ui.browser.actions.remove;
 
+import java.util.Collection;
+import java.util.Map;
+
+import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.PossibleIndexRoot;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.indexing.IndexUtils;
 import org.simantics.db.layer0.adapter.impl.AbstractRemover;
 import org.simantics.db.layer0.adapter.impl.EntityRemover;
 import org.simantics.layer0.Layer0;
 import org.simantics.sysdyn.SysdynResource;
 
 /**
- * 
+ *
  * @author Miro Eklund
  *
  */
 public class ModuleSymbolRemover extends AbstractRemover {
 
     public ModuleSymbolRemover(Resource resource) {
-       super(resource);
+        super(resource);
+    }
+
+    @Override
+    public String canRemove(ReadGraph graph, Map<Object, Object> aux) throws DatabaseException {
+        Resource model = graph.syncRequest(new PossibleIndexRoot(resource));
+        if(model == null) return null;
+        Collection<Resource> symbolsInUse = IndexUtils.findByType(graph, model, resource);
+        if(symbolsInUse.isEmpty()) return null;
+        return "Module you are attemping to delete is use in the model.";
     }
-    
+
     @Override
     public void remove(WriteGraph g) throws DatabaseException {
-       g.markUndoPoint();
-
-           Layer0 L0 = Layer0.getInstance(g);
-           SysdynResource sr = SysdynResource.getInstance(g);
-               
-           //We need to remove the Module object, not just the symbol.
-           //Thus, if the resource is the symbol, find the parent Module first
-           if(g.isInstanceOf(resource, sr.ModuleSymbol)) {
-               Resource module = g.getPossibleObject(resource, L0.PartOf);
-               if(module != null) {
-                   EntityRemover.remove(g, module, false); //Remove Module instead - was of type ModuleSymbol
-               } else {
-                       EntityRemover.remove(g, resource, false);
-               }
-           } else {
-               EntityRemover.remove(g, resource, false); //Remove resource - not of type ModuleSymbol
-           }
+        g.markUndoPoint();
+
+        Layer0 L0 = Layer0.getInstance(g);
+        SysdynResource sr = SysdynResource.getInstance(g);
+
+        //We need to remove the Module object, not just the symbol.
+        //Thus, if the resource is the symbol, find the parent Module first
+        if(g.isInstanceOf(resource, sr.ModuleSymbolType)) {
+            Resource module = g.getPossibleObject(resource, L0.PartOf);
+            if(module != null) {
+                EntityRemover.remove(g, module, false); //Remove Module instead - was of type ModuleSymbol
+            } else {
+                EntityRemover.remove(g, resource, false);
+            }
+        } else {
+            EntityRemover.remove(g, resource, false); //Remove resource - not of type ModuleSymbol
+        }
     }
 
     @Override