From: Antti Villberg Date: Mon, 27 Mar 2017 08:17:25 +0000 (+0300) Subject: Support tg discovery in export/import X-Git-Tag: v1.28.0~38 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=32c804755176db2bb20f46f6a69a418c46d458f5 Support tg discovery in export/import refs #7103 Change-Id: I471f9f0d5fa2b1bb1b825d7fde69eabc57422799 --- diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/migration/MigrationUtils.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/migration/MigrationUtils.java index 052bc6e6f..7af76baf3 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/migration/MigrationUtils.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/migration/MigrationUtils.java @@ -11,24 +11,32 @@ *******************************************************************************/ package org.simantics.db.layer0.migration; +import java.io.DataInputStream; import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.simantics.databoard.Bindings; +import org.simantics.databoard.adapter.AdaptException; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.WriteOnlyGraph; import org.simantics.db.common.CommentMetadata; +import org.simantics.db.common.primitiverequest.PossibleResource; import org.simantics.db.common.request.BinaryRead; import org.simantics.db.common.request.FreshEscapedName; import org.simantics.db.common.request.UnaryRead; @@ -42,6 +50,7 @@ import org.simantics.db.layer0.adapter.impl.DefaultPasteHandler; 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.util.ExternalDownloadBean; import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.db.layer0.util.TGTransferableGraphSource; import org.simantics.db.service.XSupport; @@ -307,32 +316,39 @@ public class MigrationUtils { if(monitor == null) monitor = new NullProgressMonitor(); + Variant edbVariant = tg.extensions.get(ExternalDownloadBean.EXTENSION_KEY); + if(edbVariant != null) { + try { + ExternalDownloadBean edb = (ExternalDownloadBean)edbVariant.getValue(ExternalDownloadBean.BINDING); + for(Map.Entry entry : edb.downloads.entrySet()) { + String uri = entry.getKey(); + Resource existing = session.syncRequest(new PossibleResource(uri)); + if(existing == null) { + String download = entry.getValue(); + URL url = new URL(download); + DataContainer container = DataContainers.readFile(new DataInputStream(url.openStream())); + TransferableGraph1 dependencyTg = (TransferableGraph1) container.content.getValue(TransferableGraph1.BINDING); + importSharedOntology(monitor, session, dependencyTg, true); + } + } + } catch (AdaptException e) { + throw new DatabaseException(e); + } catch (MalformedURLException e) { + throw new DatabaseException(e); + } catch (IOException e) { + throw new DatabaseException(e); + } + + } + Collection roots = TransferableGraphUtils.getRoots(tg); if(roots.size() == 1) { -// Identity id = roots.iterator().next(); -// final Root root = (Root)id.definition; -// Resource rootResource = session.syncRequest(new WriteResultRequest() { -// @Override -// public Resource perform(WriteGraph graph) throws DatabaseException { -// Resource type = graph.getResource(root.type); -// Resource existing = graph.getPossibleResource(root.name); -// if(existing != null) throw new DatabaseException("Shared library " + root.name + " exists already."); -// return Layer0Utils.applySCL("Simantics/SharedOntologies", "createSharedOntology", graph, root.name, type); -// } -// }); try { TGTransferableGraphSource tgSource = new TGTransferableGraphSource(tg); SharedOntologyImportAdvisor advisor = new SharedOntologyImportAdvisor(published); -// TransferableGraphs.importGraph1(session, tgSource, advisor); - -// if (advisor.getRoots().size() == 1) { -// return advisor.getRoots().iterator().next(); -// } - //TransferableGraphs.importGraph1(session, tg, new SharedOntologyImportAdvisor(), null); MigrationState state = newState(); - //state.setProperty(MigrationStateKeys.BASE_URI, AprosBuiltins.URIs.Migration); state.setProperty(MigrationStateKeys.UPDATE_DEPENDENCIES, false); state.setProperty(MigrationStateKeys.CURRENT_TGS, tgSource); state.setProperty(MigrationStateKeys.SESSION, session); diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ExternalDownloadBean.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ExternalDownloadBean.java new file mode 100644 index 000000000..6dd2b84ac --- /dev/null +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ExternalDownloadBean.java @@ -0,0 +1,20 @@ +package org.simantics.db.layer0.util; + +import java.util.TreeMap; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.binding.Binding; + +public class ExternalDownloadBean { + + public static final String EXTENSION_KEY = ExternalDownloadBean.class.getSimpleName(); + + public static final Binding BINDING = Bindings.getBindingUnchecked(ExternalDownloadBean.class); + + public TreeMap downloads = new TreeMap<>(); + + public ExternalDownloadBean(TreeMap downloads) { + this.downloads = downloads; + } + +} diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelTransferableGraphSource.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelTransferableGraphSource.java index 8602da827..cbd3130ee 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelTransferableGraphSource.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ModelTransferableGraphSource.java @@ -52,6 +52,7 @@ public class ModelTransferableGraphSource implements TransferableGraphSource { TIntArrayList externalParents = new TIntArrayList(); ArrayList externalNames = new ArrayList(); + TreeMap downloads = new TreeMap(); public ModelTransferableGraphSource(final ReadGraph graph, TransferableGraphConfiguration2 configuration, final DomainProcessorState state, File ... fs) throws DatabaseException { @@ -118,6 +119,8 @@ public class ModelTransferableGraphSource implements TransferableGraphSource { this.resourceCount = state.id; + state.extensions.put(ExternalDownloadBean.EXTENSION_KEY, new Variant(ExternalDownloadBean.BINDING, new ExternalDownloadBean(downloads))); + } int indent = 0; @@ -200,6 +203,11 @@ public class ModelTransferableGraphSource implements TransferableGraphSource { state.ids.put(r, state.id); // Ensure that this resource is included into the set of externals to maintain the total number of externals state.externals.add(r); + String download = graph.getPossibleRelatedValue(res, L0.Ontology_download, Bindings.STRING); + if(download != null) { + String uri = graph.getURI(res); + downloads.put(uri, download); + } return state.id++; } } diff --git a/bundles/org.simantics.layer0/graph.tg b/bundles/org.simantics.layer0/graph.tg index 931d67ed3..37fc6470b 100644 Binary files a/bundles/org.simantics.layer0/graph.tg and b/bundles/org.simantics.layer0/graph.tg differ diff --git a/bundles/org.simantics.layer0/graph/Layer0.pgraph b/bundles/org.simantics.layer0/graph/Layer0.pgraph index 41f13c301..93d348f05 100644 --- a/bundles/org.simantics.layer0/graph/Layer0.pgraph +++ b/bundles/org.simantics.layer0/graph/Layer0.pgraph @@ -107,7 +107,8 @@ L0.Ontology -- L0.Ontology.global L0.Boolean - + >-- L0.Ontology.download --> L0.String -- L0.SharedOntology.treatAsSystemOntology --> L0.Boolean