TransferableGraphSource tg;
VirtualGraph vg;
IImportAdvisor2 advisor;
+ TGStatusMonitor monitor;
ClusterBuilder2 builder;
final TGResourceUtil resourceUtil = new TGResourceUtil();
Resource NameOf;
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.tg = tg;
this.vg = vg;
this.advisor = advisor;
+ this.monitor = monitor;
+ }
+
+ private int updatePercentage(int percentage, int done, int total) {
+ if (monitor != null && (done & 63) == 0) {
+ int current = 100*done / total;
+ if (current > percentage) {
+ percentage = current;
+ monitor.status(percentage);
+ }
+ }
+ return percentage;
}
public void readIdentities(ReadGraph g) throws Exception {
}
}
else if(definition instanceof Internal) {
- String uri = TransferableGraphUtils.getURI(resourceCount, identityMap, identity.resource);
+ String uri = TransferableGraphUtils.getTrueURI(resourceCount, identityMap, identity.resource);
Resource existing = graph.getPossibleResource(uri);
if(existing != null) {
existingInternalMap.put(identity.resource, existing);
Resource parent = resolvedParents.get(parts[0]);
// TODO: proper exception message
- if(parent == null) throw new IllegalStateException("!!");
+ if(parent == null) {
+ throw new IllegalStateException("!!");
+ }
Resource childResource = graph.newResource();
graph.claim(childResource, InstanceOf, null, ExternalEntity);
}
}
}
-
- tg.getStatementCount();
+
+ int[] done = { 0 };
+ int[] percentage = { 0 };
+
+ int statementCount = tg.getStatementCount();
tg.forStatements(null, new TransferableGraphSourceProcedure<int[]>() {
@Override
int inverse = handles[inv];
builder.addStatement(graph, object, inverse, subject);
}
-
+
+ // Count from 0% -> 50% => total = statementCount*2
+ percentage[0] = updatePercentage(percentage[0], done[0]++, statementCount*2);
+
}
});
- tg.getValueCount();
-
+ int valueCount = tg.getValueCount();
+ done[0] = 0;
+
class ValueProcedure extends InputStream implements TransferableGraphSourceValueProcedure {
private TGResourceUtil util = new TGResourceUtil();
s.skip(this);
}
builder.endValue();
-
+ work();
+
}
@Override
for (int i = 0; i < length; ++i)
builder.appendValue(input.readUnsignedByte());
builder.endValue();
+ work();
}
+ private void work() {
+ // Count from 50% -> 100% => [valueCount, valueCount*2)
+ percentage[0] = updatePercentage(percentage[0], valueCount + done[0]++, valueCount*2);
+ }
};
tg.forValues2(null, new ValueProcedure());