1
2
3
4 package de.tivsource.page.restore;
5
6 import java.io.BufferedReader;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.InputStreamReader;
10 import java.io.UnsupportedEncodingException;
11 import java.security.NoSuchAlgorithmException;
12 import java.text.ParseException;
13 import java.text.SimpleDateFormat;
14 import java.util.Date;
15 import java.util.HashMap;
16 import java.util.Iterator;
17 import java.util.Map;
18 import java.util.SortedSet;
19 import java.util.TreeSet;
20 import java.util.UUID;
21
22 import org.apache.logging.log4j.LogManager;
23 import org.apache.logging.log4j.Logger;
24
25 import de.tivsource.page.dao.location.LocationDaoLocal;
26 import de.tivsource.page.dao.picture.PictureDaoLocal;
27 import de.tivsource.page.entity.embeddable.Address;
28 import de.tivsource.page.entity.embeddable.ContactDetails;
29 import de.tivsource.page.entity.enumeration.Language;
30 import de.tivsource.page.entity.location.HourMinute;
31 import de.tivsource.page.entity.location.Location;
32 import de.tivsource.page.entity.location.OpeningHour;
33 import de.tivsource.page.entity.namingitem.Description;
34 import de.tivsource.page.entity.namingitem.NamingItem;
35 import de.tivsource.page.enumeration.Weekday;
36
37
38
39
40
41 public class RestoreLocation {
42
43
44
45
46 private static final Logger LOGGER = LogManager.getLogger(RestoreLocation.class);
47
48 private LocationDaoLocal locationDaoLocal;
49
50 private PictureDaoLocal pictureDaoLocal;
51
52 public RestoreLocation(LocationDaoLocal locationDaoLocal, PictureDaoLocal pictureDaoLocal) {
53 super();
54 this.locationDaoLocal = locationDaoLocal;
55 this.pictureDaoLocal = pictureDaoLocal;
56 }
57
58 public void generate(InputStream inputStream) {
59 cleanup();
60 BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
61 try {
62 String line = null;
63 while ((line = in.readLine()) != null) {
64 if (!line.startsWith("[Format Definition]")) {
65 Location location = convert(line);
66 locationDaoLocal.merge(location);
67 }
68 }
69 } catch (IOException e) {
70 e.printStackTrace();
71 } catch (NoSuchAlgorithmException e) {
72 e.printStackTrace();
73 }
74 }
75
76 private Location convert(String line) throws NoSuchAlgorithmException, UnsupportedEncodingException {
77
78
79
80
81
82
83
84
85
86
87 String[] items = line.split("\\|");
88
89
90 Location location = new Location();
91
92 location.setUuid(items[0]);
93 location.setAddress(createAddress(items[1], items[2], items[3], items[4]));
94 location.setContactDetails(createContactDetails(items[5], items[6], items[7], items[8], items[9]));
95
96 Map<Language, Description> descriptionMap = new HashMap<Language, Description>();
97 descriptionMap.put(Language.DE, createDescription(
98 items[10], items[11], items[12],
99 items[13], Language.DE, location));
100 descriptionMap.put(Language.EN, createDescription(
101 items[14], items[15], items[16],
102 items[17], Language.EN, location));
103 location.setDescriptionMap(descriptionMap);
104
105 LOGGER.info("OpeningHourString: " + items[18]);
106
107 location.setOpeningHours(createOpeningHour(items[18], location));
108
109 location.setLatitude(items[19]);
110 location.setLongitude(items[20]);
111 location.setVisible(items[21].equals("true") ? true : false);
112 location.setCreated(convertDateString(items[22]));
113 location.setModified(convertDateString(items[23]));
114 location.setModifiedBy(items[24]);
115 location.setModifiedAddress(items[25]);
116 location.setEvent(items[26].equals("true") ? true : false);
117 location.setPicture(pictureDaoLocal.findByUuid(items[27]));
118
119 location.setOrder(Integer.parseInt(items[28]));
120 location.setPictureOnPage(items[29].equals("true") ? true : false);
121
122 return location;
123 }
124
125
126
127
128
129
130 private Date convertDateString(String dateString) {
131 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
132 try {
133 return simpleDateFormat.parse(dateString);
134 } catch (ParseException e) {
135 return new Date();
136 }
137 }
138
139 private Address createAddress(String street, String zip, String city, String country) {
140
141 Address address = new Address();
142 address.setStreet(street);
143 address.setZip(zip);
144 address.setCity(city);
145 address.setCountry(country);
146 return address;
147 }
148
149 private ContactDetails createContactDetails(String mobile, String telephone, String fax, String email, String homepage) {
150
151 ContactDetails contactDetails = new ContactDetails();
152 contactDetails.setMobile(mobile);
153 contactDetails.setTelephone(telephone);
154 contactDetails.setFax(fax);
155 contactDetails.setEmail(email);
156 contactDetails.setHomepage(homepage);
157 return contactDetails;
158 }
159
160 private Description createDescription(
161 String uuid, String name, String description,
162 String keywords, Language language, NamingItem namingItem) {
163 Description pageDescription = new Description();
164 pageDescription.setUuid(uuid);
165 pageDescription.setName(name);
166 pageDescription.setDescription(description);
167 pageDescription.setKeywords(keywords);
168 pageDescription.setLanguage(language);
169 pageDescription.setNamingItem(namingItem);
170 return pageDescription;
171 }
172
173 private SortedSet<OpeningHour> createOpeningHour(String input, Location location) {
174
175
176 SortedSet<OpeningHour> sortedSet = new TreeSet<OpeningHour>();
177
178 String[] csvOpeningHours = input.split("!");
179
180 LOGGER.info("Inhalt InputString: " + input);
181 LOGGER.info("Länge des csvOpeningHours Arrays: " + csvOpeningHours.length);
182 if(input.length() > 0) {
183
184 for (int i = 0; i < csvOpeningHours.length; i++) {
185
186 String[] csvOpeningHour = csvOpeningHours[i].split(";");
187
188 OpeningHour openingHour = new OpeningHour();
189 openingHour.setUuid(UUID.randomUUID().toString());
190 openingHour.setLocation(location);
191 openingHour.setWeekday(Weekday.valueOf(csvOpeningHour[0]));
192 openingHour.setOpen(createHourMinute(csvOpeningHour[1]));
193 openingHour.setClose(createHourMinute(csvOpeningHour[2]));
194 sortedSet.add(openingHour);
195 }
196 }
197
198 return sortedSet;
199 }
200
201 private HourMinute createHourMinute(String input) {
202 String[] csvHourMinute = input.split(":");
203 HourMinute hourMinute = new HourMinute();
204 hourMinute.setHour(Integer.parseInt(csvHourMinute[0]));
205 hourMinute.setMinute(Integer.parseInt(csvHourMinute[1]));
206 return hourMinute;
207 }
208
209 private void cleanup() {
210 if(locationDaoLocal.countAll() > 0) {
211 Iterator<Location> locationIterator = locationDaoLocal.findAll(0, locationDaoLocal.countAll()).iterator();
212 while(locationIterator.hasNext()) {
213 Location next = locationIterator.next();
214 locationDaoLocal.delete(next);
215 }
216 }
217 }
218
219 }