001
014
015 package com.liferay.portal.backgroundtask;
016
017 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskStatus;
018 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskStatusRegistry;
019
020 import java.util.HashMap;
021 import java.util.Map;
022 import java.util.concurrent.locks.Lock;
023 import java.util.concurrent.locks.ReadWriteLock;
024 import java.util.concurrent.locks.ReentrantReadWriteLock;
025
026
029 public class BackgroundTaskStatusRegistryImpl
030 implements BackgroundTaskStatusRegistry {
031
032 @Override
033 public BackgroundTaskStatus getBackgroundTaskStatus(long backgroundTaskId) {
034 Lock lock = _readWriteLock.readLock();
035
036 lock.lock();
037
038 try {
039 return _backgroundTaskStatuses.get(backgroundTaskId);
040 }
041 finally {
042 lock.unlock();
043 }
044 }
045
046 @Override
047 public BackgroundTaskStatus registerBackgroundTaskStatus(
048 long backgroundTaskId) {
049
050 Lock lock = _readWriteLock.writeLock();
051
052 lock.lock();
053
054 try {
055 BackgroundTaskStatus backgroundTaskStatus =
056 _backgroundTaskStatuses.get(backgroundTaskId);
057
058 if (backgroundTaskStatus == null) {
059 backgroundTaskStatus = new BackgroundTaskStatus();
060
061 _backgroundTaskStatuses.put(
062 backgroundTaskId, backgroundTaskStatus);
063 }
064
065 return backgroundTaskStatus;
066 }
067 finally {
068 lock.unlock();
069 }
070 }
071
072 @Override
073 public BackgroundTaskStatus unregisterBackgroundTaskStatus(
074 long backgroundTaskId) {
075
076 Lock lock = _readWriteLock.writeLock();
077
078 lock.lock();
079
080 try {
081 BackgroundTaskStatus backgroundTaskStatus =
082 _backgroundTaskStatuses.remove(backgroundTaskId);
083
084 return backgroundTaskStatus;
085 }
086 finally {
087 lock.unlock();
088 }
089 }
090
091 private Map<Long, BackgroundTaskStatus> _backgroundTaskStatuses =
092 new HashMap<Long, BackgroundTaskStatus>();
093 private ReadWriteLock _readWriteLock = new ReentrantReadWriteLock();
094
095 }