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.customer;
35
36 import java.time.LocalDate;
37 import java.util.ArrayList;
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 CustomerService {
54
55 private static CustomerService instance;
56 private static final Logger LOGGER = Logger.getLogger(CustomerService.class.getName());
57
58 private final HashMap<Long, Customer> contacts = new HashMap<>();
59 private long nextId = 0;
60
61 private CustomerService() {
62 }
63
64
65
66
67 public static CustomerService getInstance() {
68 if (instance == null) {
69 instance = new CustomerService();
70 instance.ensureTestData();
71 }
72 return instance;
73 }
74
75
76
77
78 public synchronized List<Customer> findAll() {
79 return findAll(null);
80 }
81
82
83
84
85
86
87
88
89
90 public synchronized List<Customer> findAll(String stringFilter) {
91 ArrayList<Customer> arrayList = getCustomers(stringFilter);
92 Collections.sort(arrayList, new Comparator<Customer>() {
93
94 @Override
95 public int compare(Customer o1, Customer 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<Customer> findAll(String stringFilter, int start, int maxresults) {
115 ArrayList<Customer> arrayList = getCustomers(stringFilter);
116 Collections.sort(arrayList, new Comparator<Customer>() {
117
118 @Override
119 public int compare(Customer o1, Customer 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<Customer> getCustomers(String stringFilter) {
131 ArrayList<Customer> arrayList = new ArrayList<>();
132 for (Customer 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(CustomerService.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(Customer value) {
160 contacts.remove(value.getId());
161 }
162
163
164
165
166
167
168
169 public synchronized void save(Customer 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 = (Customer) 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 final String[] names = new String[] { "Gabrielle Patel", "Brian Robinson", "Eduardo Haugen",
192 "Koen Johansen", "Alejandro Macdonald", "Angel Karlsson", "Yahir Gustavsson", "Haiden Svensson",
193 "Emily Stewart", "Corinne Davis", "Ryann Davis", "Yurem Jackson", "Kelly Gustavsson",
194 "Eileen Walker", "Katelyn Martin", "Israel Carlsson", "Quinn Hansson", "Makena Smith",
195 "Danielle Watson", "Leland Harris", "Gunner Karlsen", "Jamar Olsson", "Lara Martin",
196 "Ann Andersson", "Remington Andersson", "Rene Carlsson", "Elvis Olsen", "Solomon Olsen",
197 "Jaydan Jackson", "Bernard Nilsen", "Saimir Gasa" };
198
199 final String[] childrenNames = new String[] { "Child One", "Child Two" };
200
201 Random r = new Random(0);
202 for (String name : names) {
203 String[] split = name.split(" ");
204 Customer c = new Customer();
205 c.setFirstName(split[0]);
206 c.setLastName(split[1]);
207 c.setEmail(split[0].toLowerCase() + "@" + split[1].toLowerCase() + ".com");
208 c.setStatus(CustomerStatus.values()[r.nextInt(CustomerStatus.values().length)]);
209 int daysOld = 0 - r.nextInt(365 * 15 + 365 * 60);
210 c.setBirthDate(LocalDate.now().plusDays(daysOld));
211
212 List<Customer> children = new ArrayList<>();
213 for (String childName : childrenNames) {
214 String[] spaceSplit = childName.split(" ");
215 Customer child = new Customer();
216 child.setFirstName(spaceSplit[0]);
217 child.setLastName(spaceSplit[1]);
218 child.setEmail(spaceSplit[0].toLowerCase() + "@" + spaceSplit[1].toLowerCase() + ".com");
219 child.setStatus(CustomerStatus.values()[r.nextInt(CustomerStatus.values().length)]);
220
221 int days = 0 - r.nextInt(365 * 15 + 365 * 60);
222 child.setBirthDate(LocalDate.now().plusDays(days));
223
224 children.add(child);
225 }
226 c.setChildren(children);
227 save(c);
228 }
229 }
230 }
231 }