use of org.openforis.collect.model.RecordLock in project collect by openforis.
the class RecordLockManager method getLockBySessionId.
private synchronized RecordLock getLockBySessionId(String sessionId) {
clearInactiveLocks();
Collection<RecordLock> lcks = locks.values();
for (RecordLock l : lcks) {
if (l.getSessionId().equals(sessionId)) {
return l;
}
}
return null;
}
use of org.openforis.collect.model.RecordLock in project collect by openforis.
the class RecordLockManager method isLockAllowed.
public synchronized boolean isLockAllowed(User user, int recordId, String sessionId, boolean forceUnlock) throws RecordLockedException, MultipleEditException {
RecordLock uLock = getLockBySessionId(sessionId);
if (uLock != null) {
throw new MultipleEditException("User is editing another record: " + uLock.getRecordId());
}
RecordLock lock = getLock(recordId);
if (lock == null || (forceUnlock && isForceUnlockAllowed(user, lock))) {
return true;
} else if (lock.getUser().getId().equals(user.getId())) {
throw new RecordLockedByActiveUserException(user.getUsername());
} else {
String lockingUserName = lock.getUser().getUsername();
throw new RecordLockedException("Record already locked", lockingUserName);
}
}
use of org.openforis.collect.model.RecordLock in project collect by openforis.
the class RecordLockManager method lock.
public synchronized void lock(int recordId, User user, String sessionId, boolean forceUnlock) throws RecordLockedException, MultipleEditException {
RecordLock oldLock = getLock(recordId);
if (oldLock != null) {
locks.remove(recordId);
}
RecordLock lock = new RecordLock(sessionId, recordId, user, timeoutMillis);
locks.put(recordId, lock);
}
use of org.openforis.collect.model.RecordLock in project collect by openforis.
the class RecordLockManager method getLock.
public synchronized RecordLock getLock(int recordId) {
clearInactiveLocks();
RecordLock lock = locks.get(recordId);
return lock;
}
use of org.openforis.collect.model.RecordLock in project collect by openforis.
the class RecordManager method delete.
@Transactional(readOnly = false, propagation = REQUIRED)
public void delete(int recordId) throws RecordPersistenceException {
if (isLockingEnabled() && lockManager.isLocked(recordId)) {
RecordLock lock = lockManager.getLock(recordId);
User lockUser = lock.getUser();
throw new RecordLockedException(lockUser.getUsername());
} else {
recordDao.delete(recordId);
}
}
Aggregations