package com.idega.slide.bean; import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.ReentrantLock; import com.idega.slide.webdavservlet.WebdavExtendedServlet; public class WorkerInfo { private List<String> queue = new ArrayList<String>(); private ReentrantLock lock; public void addToQueue(String workId) { synchronized (queue) { if (!queue.contains(workId)) { queue.add(workId); } } } public void removeFromQueue(String workId) { synchronized (queue) { queue.remove(workId); } unlock(); } public boolean isQueueEmpty() { synchronized (queue) { if (queue.size() == 0) { return Boolean.TRUE; } } return Boolean.FALSE; } private void unlock() { if (lock != null) { synchronized (lock) { try { lock.unlock(); } catch (IllegalMonitorStateException e) {} } } } public void lock() { if (lock == null) { lock = new ReentrantLock(); } synchronized (lock) { if (!lock.isLocked()) { lock.lock(); } } } public boolean isFirstInAQueue(String workId) { synchronized (queue) { if (queue.size() == 0) { return Boolean.FALSE; } if (workId.equals(queue.get(0)) && !isActive()) { return Boolean.TRUE; } } return Boolean.FALSE; } public synchronized boolean isActive() { if (WebdavExtendedServlet.isLocked()) { return Boolean.TRUE; } if (lock == null) { return Boolean.FALSE; } if (lock.isLocked()) { return Boolean.TRUE; } return Boolean.FALSE; } public boolean isLockedByCurrentThread() { if (lock == null) { return false; } synchronized (lock) { return lock.isHeldByCurrentThread(); } } @Override public String toString() { return "Queue: " + queue + ", lock: " + lock; } }