Resource ConsistsOf;
Resource PartOf;
Resource HasName;
- Resource NameOf;
+ Resource NameOf;
+
+ boolean failOnMissing;
public StreamingTransferableGraphImportProcess(Session session, VirtualGraph vg, TransferableGraphSource tg, IImportAdvisor2 advisor) {
this(session, vg, tg, advisor, null);
}
-
+
public StreamingTransferableGraphImportProcess(Session session, VirtualGraph vg, TransferableGraphSource tg, IImportAdvisor2 advisor, TGStatusMonitor monitor) {
+ this(session, vg, tg, advisor, monitor, failOnMissingEntities());
+ }
+
+ public StreamingTransferableGraphImportProcess(Session session, VirtualGraph vg, TransferableGraphSource tg, IImportAdvisor2 advisor, TGStatusMonitor monitor, boolean failOnMissing) {
this.tg = tg;
this.vg = vg;
this.advisor = advisor;
this.monitor = monitor;
+ this.failOnMissing = failOnMissing;
}
private int updatePercentage(int percentage, int done, int total) {
this.handles = new int[resourceCount];
TIntObjectMap<Identity> identityMap = TransferableGraphUtils.mapIdentities(identities);
+ // We must process roots first, because internal identifiers depend on them.
+ for(Identity identity : identities) {
+ IdentityDefinition definition = identity.definition;
+ if (definition instanceof Root) {
+ Root root = (Root) definition;
+ if (root.name.equals(""))
+ handles[identity.resource] = builder.handle(RootLibrary);
+ else {
+ Resource existing = advisor.analyzeRoot(graph, root);
+ if (existing != null)
+ handles[identity.resource] = builder.handle(existing);
+ }
+ }
+ }
+
for(Identity identity : identities) {
IdentityDefinition definition = identity.definition;
if(definition instanceof External) {
existingInternalMap.put(identity.resource, existing);
}
}
- else if(definition instanceof Root) {
- Root root = (Root)definition;
- if(root.name.equals(""))
- handles[identity.resource] = builder.handle(RootLibrary);
- else {
- Resource existing = advisor.analyzeRoot(graph, root);
- if(existing != null)
- handles[identity.resource] = builder.handle(existing);
- }
- }
else if(definition instanceof Optional) {
External def = (External)definition;
Resource parent = builder.resource(handles[def.parent]);
handles[identity.resource] = builder.handle(graph.syncRequest(new UnescapedChildMapOfResource(parent)).get(def.name));
}
}
-
- //if(!missingExternals.isEmpty()) throw new MissingDependencyException(this);
-
+
+ if (!missingExternals.isEmpty() && failOnMissing)
+ throw new MissingDependencyException(this);
+ }
+
+ private static boolean failOnMissingEntities() {
+ return "true".equalsIgnoreCase(
+ System.getProperty(
+ "org.simantics.tg.import.failOnMissingEntities",
+ "false") );
}
@Override
public Resource createChild(WriteOnlyGraph graph, Resource parent, Resource child, String name) throws DatabaseException {
+ //System.err.println("child " + parent + " - " + child + " = " + name);
if(child == null) child = graph.newResource();
Resource nameResource = graph.newResource();
graph.claim(nameResource, InstanceOf, null, String);
graph.claimValue(nameResource, name, WriteBindings.STRING);
graph.claim(child, HasName, NameOf, nameResource);
+ graph.claim(parent, ConsistsOf, PartOf, child);
return child;
}
int[] getClustering() {
+ if (vg != null)
+ return null;
Variant v = extensions.get(Extensions.CLUSTERING);
if(v == null) return null;
try {
}
int[] getClusterSets() {
+ if (vg != null)
+ return null;
Variant v = extensions.get(Extensions.CLUSTER_SETS);
if(v == null) return null;
try {
Resource parent = resolvedParents.get(parts[0]);
// TODO: proper exception message
if(parent == null) {
- throw new IllegalStateException("!!");
+ throw new IllegalStateException("Missing URI: " + uri);
}
Resource childResource = graph.newResource();
}
else if(definition instanceof Internal) {
Internal def = (Internal)definition;
-
Resource external = existingInternalMap.get(identity.resource);
if(external != null) {
handles[identity.resource] = builder.handle(external);
tg.forValues2(null, new ValueProcedure());
for(Resource r : existingInternalMap.valueCollection()) {
- graph.deny(r, InstanceOf, null, ExternalEntity, null);
+ try {
+ graph.deny(r, InstanceOf, null, ExternalEntity, null);
+ } catch (DatabaseException e) {
+ graph.deny(r, InstanceOf, null, ExternalEntity, vg);
+ }
}
}