String tempLockOwner = "doUnlock" + System.currentTimeMillis() + req.toString();
try {
if (resourceLocks.lock(transaction, path, tempLockOwner, false, 0, TEMP_TIMEOUT, TEMPORARY)) {
String lockId = getLockIdFromLockTokenHeader(req);
LockedObject lo;
if (lockId != null && ((lo = resourceLocks.getLockedObjectByID(transaction, lockId)) != null)) {
String[] owners = lo.getOwner();
String owner = null;
if (lo.isShared()) {
// more than one owner is possible
if (owners != null) {
for (int i = 0; i < owners.length; i++) {
// remove owner from LockedObject
lo.removeLockedObjectOwner(owners[i]);
}
}
} else {
// exclusive, only one lock owner
if (owners != null) {
owner = owners[0];
}
}
if (resourceLocks.unlock(transaction, lockId, owner)) {
StoredObject so = store.getStoredObject(transaction, path);
if (so == null) {
resp.setStatus(WebdavStatus.SC_NOT_FOUND);
} else {
if (so.isNullResource()) {
store.removeObject(transaction, path);
}
resp.setStatus(WebdavStatus.SC_NO_CONTENT);
}
} else {
logger.trace("DoUnlock failure at " + lo.getPath());
resp.sendError(WebdavStatus.SC_METHOD_FAILURE);
}
} else {
resp.sendError(WebdavStatus.SC_BAD_REQUEST);