1 package org.xvsm.internal.tasks.dao.inmemory;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.TreeMap;
7 import java.util.WeakHashMap;
8 import java.util.concurrent.locks.Lock;
9 import java.util.concurrent.locks.ReadWriteLock;
10 import java.util.concurrent.locks.ReentrantReadWriteLock;
11
12 import org.apache.log4j.Logger;
13 import org.xvsm.internal.tasks.OperationTask;
14 import org.xvsm.internal.tasks.dao.ITransactionDAO;
15 import org.xvsm.transactions.Transaction;
16
17 /***
18 *
19 * @author Christian Schreiber, Michael Proestler
20 *
21 */
22 public class TransactionDAO implements ITransactionDAO {
23
24 /***
25 * The Logger for this Class.
26 */
27 private static Logger logger = Logger.getLogger(TransactionDAO.class);
28
29 /***
30 * Contains all blocking tasks.
31 */
32 private List<OperationTask> tasks = new ArrayList<OperationTask>();
33
34 /***
35 * The read write lock.
36 */
37 private ReadWriteLock rwLock = new ReentrantReadWriteLock();
38
39 /***
40 *
41 * {@inheritDoc}.
42 */
43
44 public boolean add(OperationTask task, Transaction source) {
45 if (logger.isDebugEnabled()) {
46 logger.debug("add() task:" + task + " source: " + source);
47 }
48 synchronized (this.tasks) {
49 tasks.add(task);
50 if (logger.isDebugEnabled()) {
51 logger.debug("add() added task:" + task);
52 logger.debug("add() returns true");
53 }
54 return true;
55 }
56 }
57
58 /***
59 *
60 * {@inheritDoc}.
61 */
62
63 public List<OperationTask> take() {
64 if (logger.isDebugEnabled()) {
65 logger.debug("take()");
66 }
67 synchronized (this.tasks) {
68
69 List<OperationTask> retVal = new ArrayList<OperationTask>(
70 this.tasks);
71 this.tasks.clear();
72 if (logger.isDebugEnabled()) {
73 logger.debug("take() returns " + retVal);
74 }
75 return retVal;
76
77 }
78 }
79
80 /***
81 *
82 * {@inheritDoc}.
83 */
84 public List<OperationTask> getAll() {
85 if (logger.isDebugEnabled()) {
86 logger.debug("getAll()");
87 }
88 synchronized (this.tasks) {
89 List<OperationTask> retVal = new ArrayList<OperationTask>(
90 this.tasks);
91 if (logger.isDebugEnabled()) {
92 logger.debug("getAll() returns " + retVal);
93 }
94 return retVal;
95 }
96 }
97
98 /***
99 *
100 * {@inheritDoc}.
101 */
102 public Lock readLock() {
103 return this.rwLock.readLock();
104 }
105
106 /***
107 *
108 * {@inheritDoc}.
109 */
110 public Lock writeLock() {
111 return this.rwLock.writeLock();
112 }
113
114 /***
115 * {@inheritDoc}
116 */
117
118 public void commit(Transaction tx) {
119
120 }
121
122 /***
123 * {@inheritDoc}
124 */
125 public void remove(OperationTask t) {
126 synchronized (this.tasks) {
127 this.tasks.remove(t);
128 }
129 }
130 }