View Javadoc

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   * @author Marc Michele
39   *
40   */
41  public class RestoreLocation {
42  
43      /**
44       * Statischer Logger der Klasse.
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          // uuid|
79          // street|zip|city|country|
80          // mobile|telephone|fax|email|homepage|
81          // uuid(de)|name(de)|description(de)|keywords(de)|
82          // uuid(en)|name(en)|description(en)|keywords(en)|
83          // openingHours|
84          // latitude|longitude|visible|created|modified|modifiedBy|ip|events|picture|order|pictureOnPage|
85  
86          // Zerlege CSV-Zeile in String-Array.
87          String[] items = line.split("\\|");
88  
89          // Erstelle Announcement-Objekt
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     }// Ende convert(String line)
124 
125     /**
126      * Methode zum Konvertieren eines Strings des Formates "1970-12-01 23:59:59" in ein Date-Object. 
127      * @param dateString
128      * @return
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         // street|zip|city|country|
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         // mobile|telephone|fax|email|homepage|
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         // Erzeuge SortedSet.
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             // Laufe durch das Array und füge die Tags der Tag-Liste hinzu.
184             for (int i = 0; i < csvOpeningHours.length; i++) {
185                 // Zerlege CSV-String.
186                 String[] csvOpeningHour = csvOpeningHours[i].split(";");
187                 // Erstelle OpeningHour
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             }// Ende for
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     }// Ende cleanup()
218 
219 }// Ende class