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];
else
owner = null;
}
if (_resourceLocks.unlock(transaction, lockId, owner)) {
StoredObject so = _store.getStoredObject(
transaction, path);
if (so.isNullResource()) {
_store.removeObject(transaction, path);
}
resp.setStatus(WebdavStatus.SC_NO_CONTENT);
} else {
LOG.trace("DoUnlock failure at " + lo.getPath());
resp.sendError(WebdavStatus.SC_METHOD_FAILURE);
}
} else {
resp.sendError(WebdavStatus.SC_BAD_REQUEST);