{
try {
FramedResource root = (FramedResource)rr_root.lock();
if (root instanceof VirtualHostResource) {
//backward to the virtual host resource
ResourceReference rr = null;
ResourceReference rrp = null;
FramedResource res = null;
try {
res = (FramedResource)ref.lock();
if (res instanceof ResourceFrame) {
ResourceFrame fr = (ResourceFrame)res;
rr = fr.getResource().getResourceReference();
} else {
rr = ref;
}
} catch (InvalidResourceException ex) {
return rr_root;
} finally {
ref.unlock();
}
while (true) {
try {
res = (FramedResource)rr.lock();
rrp = res.getParent();
if ((rrp == rr_root) || (rrp == null)) {
return getLocalRoot(rr, ref);
}
} catch (InvalidResourceException ex) {
return rr_root;
} finally {
rr.unlock();
}
rr = rrp;
}
} else {
try {
FramedResource res = (FramedResource)rr_root.lock();
ForwardFrame ffr = (ForwardFrame)
res.getFrame("org.w3c.jigsaw.proxy.ForwardFrame");
if (ffr == null) {
return rr_root;
} else {
ResourceReference rr = ffr.getLocalRootResource();
return getLocalRoot(rr, ref);
}
} catch (InvalidResourceException ex) {
return rr_root;
}