]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sharedontology/wizard/ModelImportWizard.java
Merge "Support dependency embedding in generic model export/import"
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / sharedontology / wizard / ModelImportWizard.java
index 235c304e6009f56942a8f288f17d703776f7fcad..fd8aaff3cf882023d630130d01d4b6549e38f3c0 100644 (file)
@@ -34,19 +34,20 @@ import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.simantics.Simantics;
 import org.simantics.databoard.binding.Binding;
-import org.simantics.databoard.binding.mutable.Variant;
 import org.simantics.databoard.container.DataContainer;
 import org.simantics.databoard.container.DataContainers;
 import org.simantics.databoard.container.FormatHandler;
-import org.simantics.databoard.util.binary.BinaryFile;
+import org.simantics.databoard.util.URIStringUtils;
 import org.simantics.db.Resource;
 import org.simantics.db.Session;
+import org.simantics.db.common.primitiverequest.PossibleResource;
+import org.simantics.db.layer0.adapter.impl.DefaultPasteImportAdvisor;
 import org.simantics.db.layer0.migration.MigratedImportResult;
 import org.simantics.db.layer0.migration.MigrationState;
 import org.simantics.db.layer0.migration.MigrationStateKeys;
 import org.simantics.db.layer0.migration.MigrationUtils;
-import org.simantics.db.layer0.migration.ModelImportAdvisor;
-import org.simantics.db.layer0.util.DraftStatusBean;
+import org.simantics.db.layer0.util.ModelDependenciesBean;
+import org.simantics.db.layer0.util.ModelDependency;
 import org.simantics.db.management.ISessionContext;
 import org.simantics.graph.db.ImportResult;
 import org.simantics.graph.db.MissingDependencyException;
@@ -56,7 +57,6 @@ import org.simantics.modeling.ui.utils.NoProjectPage;
 import org.simantics.project.IProject;
 import org.simantics.project.ProjectKeys;
 import org.simantics.ui.SimanticsUI;
-import org.simantics.ui.utils.ResourceAdaptionUtils;
 import org.simantics.utils.strings.EString;
 import org.simantics.utils.ui.ErrorLogger;
 import org.simantics.utils.ui.ExceptionUtils;
@@ -139,9 +139,9 @@ public class ModelImportWizard extends Wizard implements IImportWizard {
                 @Override
                 public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                     try {
-                        Resource target = ResourceAdaptionUtils.toSingleResource(importModel.selection);
+                        Resource target = Simantics.getProjectResource();
                         importModel.sessionContext.getSession().markUndoPoint();
-                        result[0] = doImport(monitor, importModel.importLocation, importModel.sessionContext.getSession(), target);
+                        result[0] = doImport(monitor, importModel.importLocation, importModel.sessionContext.getSession(), target, importModel.includeDependencies);
                     } catch (Exception e) {
                         throw new InvocationTargetException(e);
                     } finally {
@@ -153,7 +153,7 @@ public class ModelImportWizard extends Wizard implements IImportWizard {
             if (result[0].hasMissingExternals()) {
                 InfoDialog.open(getShell(), "Missing Externals Created",
                         "The system was unable to find some of the external entities referenced by the imported material. Place-holders have been created for the missing entities.\nThe missing entities are:\n"
-                                + EString.implode(result[0].tgResult.missingExternals),
+                                + URIStringUtils.unescape(EString.implode(result[0].tgResult.missingExternals)),
                         SWT.SHEET);
             }
         } catch (InvocationTargetException e) {
@@ -180,7 +180,7 @@ public class ModelImportWizard extends Wizard implements IImportWizard {
         return true;
     }
 
-    public static MigratedImportResult doImport(IProgressMonitor monitor, File modelFile, Session session, Resource target)
+    public static MigratedImportResult doImport(IProgressMonitor monitor, File modelFile, Session session, Resource target, boolean includeDependencies)
             throws Exception
     {
         SubMonitor mon = SubMonitor.convert(monitor);
@@ -203,7 +203,19 @@ public class ModelImportWizard extends Wizard implements IImportWizard {
                 state.setProperty(MigrationStateKeys.SESSION, session);
                 state.setProperty(MigrationStateKeys.PROGRESS_MONITOR, monitor);
                 
-                MigrationUtils.importMigrated(monitor, session, modelFile, state, new ModelImportAdvisor(Simantics.getProjectResource()), Simantics.getProjectResource());
+                if(includeDependencies) {
+                       final ModelDependenciesBean libraryDependenciesBean = ModelDependenciesBean.fromMigrationState(state);
+                       if(libraryDependenciesBean != null) {
+                           for(ModelDependency dependency : libraryDependenciesBean.dependencies) {
+                               Resource existing = session.sync(new PossibleResource(dependency.uri));
+                               if(existing == null) {
+                                   MigrationUtils.importSharedOntology(session, dependency.tg, false);
+                               }
+                           }
+                       }
+                }
+                
+                MigrationUtils.importMigrated(monitor, session, modelFile, state, new DefaultPasteImportAdvisor(target), target);
 
                 Collection<Resource> resultRoots = state.getProperty(MigrationStateKeys.CURRENT_ROOT_RESOURCES);
                 ImportResult result = state.getProperty(MigrationStateKeys.IMPORT_RESULT);