1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.common.filemonitor;
21
22 import org.waarp.common.filemonitor.FileMonitor.FileItem;
23 import org.waarp.common.filemonitor.FileMonitor.Status;
24
25 import java.util.Date;
26
27 import static org.waarp.common.database.DbConstant.*;
28
29
30
31
32 public abstract class FileMonitorCommandRunnableFuture implements Runnable {
33 private FileItem fileItem;
34 private Thread currentThread;
35 private FileMonitor monitor;
36
37
38
39
40 protected FileMonitorCommandRunnableFuture() {
41 }
42
43 public final void setMonitor(final FileMonitor monitor) {
44 this.monitor = monitor;
45 }
46
47
48
49
50 protected FileMonitorCommandRunnableFuture(final FileItem fileItem) {
51 setFileItem(fileItem);
52 }
53
54 public final void setFileItem(final FileItem fileItem) {
55 this.fileItem = fileItem;
56 }
57
58 @Override
59 public void run() {
60 currentThread = Thread.currentThread();
61 if (getFileItem() != null) {
62 run(getFileItem());
63 }
64 }
65
66
67
68
69 public abstract void run(FileItem fileItem);
70
71
72
73
74
75
76
77 protected final void checkReuse(final boolean ignoreAlreadyUsed) {
78 if (!ignoreAlreadyUsed && fileItem.used &&
79 fileItem.specialId != ILLEGALVALUE &&
80 fileItem.status == Status.RESTART) {
81 fileItem.used = false;
82 }
83 }
84
85 protected final boolean isReuse() {
86 return fileItem.status == Status.RESTART && !fileItem.used &&
87 fileItem.specialId != ILLEGALVALUE;
88 }
89
90 protected final boolean isIgnored(final boolean ignoreAlreadyUsed) {
91 return !ignoreAlreadyUsed && fileItem.used;
92 }
93
94
95
96
97
98
99
100
101
102 protected boolean checkFileItemBusiness(final FileItem fileItem) {
103 return fileItem.status == Status.VALID || fileItem.status == Status.RESTART;
104 }
105
106 protected final void setValid(final FileItem fileItem) {
107 fileItem.specialId = ILLEGALVALUE;
108 fileItem.used = false;
109 fileItem.status = Status.VALID;
110 }
111
112
113
114
115
116
117
118
119 protected final void finalizeValidFile(final boolean status,
120 final long specialId) {
121 if (getMonitor() != null) {
122 final Date date = new Date();
123 if (date.after(getMonitor().nextDay)) {
124
125 getMonitor().setNextDay();
126 getMonitor().todayok.set(0);
127 getMonitor().todayerror.set(0);
128 }
129 }
130 if (status) {
131 getFileItem().used = true;
132 getFileItem().status = Status.DONE;
133
134 getFileItem().specialId = specialId;
135 if (getMonitor() != null) {
136 getMonitor().globalok.incrementAndGet();
137 getMonitor().todayok.incrementAndGet();
138 }
139 } else {
140
141 getFileItem().used = false;
142 getFileItem().status = Status.VALID;
143 getFileItem().hash = null;
144 getFileItem().specialId = specialId;
145 if (getMonitor() != null) {
146 getMonitor().globalerror.incrementAndGet();
147 getMonitor().todayerror.incrementAndGet();
148 }
149 }
150 }
151
152 public final void cancel() {
153 if (currentThread != null) {
154 currentThread.interrupt();
155 }
156 }
157
158
159
160
161 public final FileItem getFileItem() {
162 return fileItem;
163 }
164
165
166
167
168 public final FileMonitor getMonitor() {
169 return monitor;
170 }
171 }