1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.poc.task;
35
36 import java.util.ArrayList;
37 import java.util.Calendar;
38 import java.util.Collections;
39 import java.util.Comparator;
40 import java.util.HashMap;
41 import java.util.List;
42 import java.util.Random;
43 import java.util.logging.Level;
44 import java.util.logging.Logger;
45
46
47
48
49
50
51
52
53 public class MagnoliaTaskService {
54
55 private static MagnoliaTaskService instance;
56 private static final Logger LOGGER = Logger.getLogger(MagnoliaTaskService.class.getName());
57
58 private final HashMap<Long, MagnoliaTask> contacts = new HashMap<>();
59 private long nextId = 0;
60
61 private MagnoliaTaskService() {
62 }
63
64
65
66
67 public static MagnoliaTaskService getInstance() {
68 if (instance == null) {
69 instance = new MagnoliaTaskService();
70 instance.ensureTestData();
71 }
72 return instance;
73 }
74
75
76
77
78 public synchronized List<MagnoliaTask> findAll() {
79 return findAll(null);
80 }
81
82
83
84
85
86
87
88
89
90 public synchronized List<MagnoliaTask> findAll(String stringFilter) {
91 ArrayList<MagnoliaTask> arrayList = getCustomers(stringFilter);
92 Collections.sort(arrayList, new Comparator<MagnoliaTask>() {
93
94 @Override
95 public int compare(MagnoliaTask../../../../info/magnolia/poc/task/MagnoliaTask.html#MagnoliaTask">MagnoliaTask o1, MagnoliaTask o2) {
96 return (int) (o2.getId() - o1.getId());
97 }
98 });
99 return arrayList;
100 }
101
102
103
104
105
106
107
108
109
110
111
112
113
114 public synchronized List<MagnoliaTask> findAll(String stringFilter, int start, int maxresults) {
115 ArrayList<MagnoliaTask> arrayList = getCustomers(stringFilter);
116 Collections.sort(arrayList, new Comparator<MagnoliaTask>() {
117
118 @Override
119 public int compare(MagnoliaTask../../../../info/magnolia/poc/task/MagnoliaTask.html#MagnoliaTask">MagnoliaTask o1, MagnoliaTask o2) {
120 return (int) (o2.getId() - o1.getId());
121 }
122 });
123 int end = start + maxresults;
124 if (end > arrayList.size()) {
125 end = arrayList.size();
126 }
127 return arrayList.subList(start, end);
128 }
129
130 private ArrayList<MagnoliaTask> getCustomers(String stringFilter) {
131 ArrayList<MagnoliaTask> arrayList = new ArrayList<>();
132 for (MagnoliaTask contact : contacts.values()) {
133 try {
134 boolean passesFilter = (stringFilter == null || stringFilter.isEmpty())
135 || contact.toString().toLowerCase().contains(stringFilter.toLowerCase());
136 if (passesFilter) {
137 arrayList.add(contact.clone());
138 }
139 } catch (CloneNotSupportedException ex) {
140 Logger.getLogger(MagnoliaTaskService.class.getName()).log(Level.SEVERE, null, ex);
141 }
142 }
143 return arrayList;
144 }
145
146
147
148
149 public synchronized long count() {
150 return contacts.size();
151 }
152
153
154
155
156
157
158
159 public synchronized void delete(MagnoliaTask value) {
160 contacts.remove(value.getId());
161 }
162
163
164
165
166
167
168
169 public synchronized void save(MagnoliaTask entry) {
170 if (entry == null) {
171 LOGGER.log(Level.SEVERE,
172 "Customer is null. Are you sure you have connected your form to the application as described in tutorial chapter 7?");
173 return;
174 }
175 if (entry.getId() == null) {
176 entry.setId(nextId++);
177 }
178 try {
179 entry = (MagnoliaTask) entry.clone();
180 } catch (Exception ex) {
181 throw new RuntimeException(ex);
182 }
183 contacts.put(entry.getId(), entry);
184 }
185
186
187
188
189 public void ensureTestData() {
190 if (findAll().isEmpty()) {
191 Random r = new Random(0);
192 for (int i = 0; i<10; i++ ) {
193 MagnoliaTaskask.html#MagnoliaTask">MagnoliaTask task = new MagnoliaTask();
194 task.setName("Publication request");
195 task.setDescription("Enhance Your Brand Potential With loong text that should not be shown");
196 task.setStatus(MagnoliaTaskStatus.values()[r.nextInt(MagnoliaTaskStatus.values().length)]);
197 int daysOld = 0 - r.nextInt(365 * 15 + 365 * 60);
198 Calendar calendar = Calendar.getInstance();
199 calendar.add(Calendar.DATE, daysOld);
200 task.setLastChange(calendar.getTime());
201 task.setSender("Administrator");
202 task.setSendTo("travel-demo-publishers");
203 task.setAssigned("Monkey");
204 save(task);
205 }
206 }
207 }
208 }