// Declare internal and external roots
for(RootSpec r : configuration.roots) {
- Resource type = graph.getPossibleType(r.resource, L0.Entity);
- if(type == null) type = L0.Entity;
+ String typeId = r.type;
+ if (typeId == null) {
+ Resource type = graph.getPossibleType(r.resource, L0.Entity);
+ typeId = type != null ? graph.getURI(type) : Layer0.URIs.Entity;
+ }
int id = state.ids.get(support.getTransientId(r.resource));
- Root root = new Root(r.name, graph.getURI(type));
+ Root root = new Root(r.name, typeId);
Identity rootId = new Identity(id,root);
internalMap.put(id, rootId);
procedure.execute(rootId);
public final Resource resource;
public final String name;
public final boolean internal;
+ /**
+ * Optional, may be null.
+ */
+ public final String type;
public RootSpec(Resource resource, String name, boolean internal) {
+ this(resource, name, internal, null);
+ }
+
+ public RootSpec(Resource resource, String name, boolean internal, String type) {
if (resource == null)
throw new NullPointerException("null resource");
if (name == null)
this.resource = resource;
this.name = name;
this.internal = internal;
+ this.type = type;
}
@Override
public String toString() {
- return "RootSpec[" + name + ", " + resource + ", " + internal + "]";
+ return "RootSpec[" + name + ", " + resource + ", " + internal + ", " + type + "]";
}
@Override
result = prime * result + (internal ? 1231 : 1237);
result = prime * result + resource.hashCode();
result = prime * result + name.hashCode();
+ result = prime * result + (type != null ? type.hashCode() : 0);
return result;
}
if (getClass() != obj.getClass())
return false;
RootSpec other = (RootSpec) obj;
- return internal == other.internal && resource.equals(other.resource) && name.equals(other.name);
+ return internal == other.internal && resource.equals(other.resource) && name.equals(other.name)
+ && objectEquals(type, other.type);
+ }
+
+ private boolean objectEquals(Object o1, Object o2) {
+ if (o1 == o2) return true;
+ if (o1 == null && o2 == null) return true;
+ if (o1 == null || o2 == null) return false;
+ return o1.equals(o2);
}
}
-
+
final public TreeMap<String, Variant> baseExtensions = new TreeMap<String,Variant>();
final public Resource indexRoot;
final public Collection<RootSpec> roots;
Set<Resource> externals = new HashSet<>();
List<RootSpec> roots = new ArrayList<>();
+ Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(resources.iterator().next()));
+ if(indexRoot == null) throw new DatabaseException("Composite is not part of any index root");
+ String indexRootUri = graph.getURI(indexRoot);
+
for(Resource resource : resources) {
// Process all connection joins.
// This is the only way to access all of them.
}
// Include resource as root
-// GUID rootId = graph.getRelatedValue(resource, L0.identifier, GUID.BINDING);
-// String rootName = graph.getRelatedValue(resource, L0.HasName, Bindings.STRING);
-// String escapedRootName = URIStringUtils.escape(rootName);
-// String escapedPath = ModelingUtils.getDiagramCompositePath(graph, resource);
CompositeInfo info = CompositeInfo.fromResource(graph, resource);
- roots.add(new RootSpec(resource, info.getTGName(), true));
+ roots.add(new RootSpec(resource, info.getTGName(), true, typeId(graph, L0, indexRootUri, resource)));
Resource id = graph.getPossibleObject(resource, L0.identifier);
if(id != null) exclusions.add(id);
// Include components as roots
for(Resource child : graph.sync(new ObjectsWithType(resource, L0.ConsistsOf, SR.Component))) {
DiagramComponentInfo cinfo = DiagramComponentInfo.fromResource(graph, info, child);
-// GUID childId = graph.getRelatedValue(resource, L0.identifier, GUID.BINDING);
-// String childName = graph.getRelatedValue(child, L0.HasName, Bindings.STRING);
id = graph.getPossibleObject(child, L0.identifier);
if(id != null) exclusions.add(id);
- roots.add(new RootSpec(child, cinfo.getTGName(info), true));
+ roots.add(new RootSpec(child, cinfo.getTGName(info), true, typeId(graph, L0, indexRootUri, child)));
}
}
- Resource model = graph.syncRequest(new PossibleIndexRoot(resources.iterator().next()));
- if(model == null) throw new DatabaseException("Composite is not part of any index root");
- roots.add(new RootSpec(model, "%model", false));
+ roots.add(new RootSpec(indexRoot, "%model", false));
TransferableGraphConfiguration2 config = TransferableGraphConfiguration2.createWithNames2(graph, roots, exclusions, true, false);
for (Resource external : externals)
return config;
}
+ private static String typeId(ReadGraph graph, Layer0 L0, String indexRootUri, Resource r) throws DatabaseException {
+ Resource type = graph.getPossibleType(r, L0.Entity);
+ if (type == null)
+ return Layer0.URIs.Entity;
+ String typeUri = graph.getPossibleURI(type);
+ if (typeUri == null || !typeUri.startsWith(indexRootUri))
+ return typeUri;
+ return "%model" + typeUri.substring(indexRootUri.length());
+ }
+
}