//
UIComponent dstChild;
if (srcChildId != null) {
dstChild = session.findObjectById(ObjectType.COMPONENT, srcChildId);
if (dstChild == null) {
throw new StaleModelException("Could not find supposed present child with id " + srcChildId);
}
// julien : this can fail due to a bug in chromattic not implementing equals method properly
// and is replaced with the foreach below
/*
* if (!dst.contains(dstChild)) { throw new IllegalArgumentException("Attempt for updating a ui component " +
* session.pathOf(dstChild) + "that is not present in the target ui container " + session.pathOf(dst)); }
*/
boolean found = false;
for (UIComponent child : dst.getComponents()) {
if (child.getObjectId().equals(srcChildId)) {
found = true;
break;
}
}
//
if (!found) {
if (hierarchyRelationships.containsKey(srcChildId)) {
String srcId = hierarchyRelationships.get(srcChildId);
// It's a move operation, so we move the node first
dst.getComponents().add(dstChild);
//
changes.add(new ModelChange.Move(srcId, dst.getObjectId(), srcChildId));
} else {
throw new IllegalArgumentException("Attempt for updating a ui component " + session.pathOf(dstChild)
+ " that is not present in the target ui container " + session.pathOf(dst));
}
}
//
changes.add(new ModelChange.Update(srcChild));
} else {
String name = srcChild.getStorageName();
if (name == null) {
// We manufacture one name
name = UUID.randomUUID().toString();
}
if (srcChild instanceof ContainerData) {
dstChild = dst.add(ObjectType.CONTAINER, name);
} else if (srcChild instanceof ApplicationData) {
dstChild = dst.add(ObjectType.WINDOW, name);
} else if (srcChild instanceof BodyData) {
dstChild = dst.add(ObjectType.BODY, name);
} else {
throw new StaleModelException("Was not expecting child " + srcChild);
}
changes.add(new ModelChange.Create(dst.getObjectId(), srcChild));
}
//