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.math.BigDecimal;
12  import java.security.NoSuchAlgorithmException;
13  import java.text.ParseException;
14  import java.text.SimpleDateFormat;
15  import java.util.Date;
16  import java.util.HashMap;
17  import java.util.Iterator;
18  import java.util.Map;
19  
20  import org.apache.logging.log4j.LogManager;
21  import org.apache.logging.log4j.Logger;
22  
23  import de.tivsource.page.dao.event.EventDaoLocal;
24  import de.tivsource.page.dao.location.LocationDaoLocal;
25  import de.tivsource.page.dao.picture.PictureDaoLocal;
26  import de.tivsource.page.entity.enumeration.Language;
27  import de.tivsource.page.entity.event.Event;
28  import de.tivsource.page.entity.location.Location;
29  import de.tivsource.page.entity.namingitem.Description;
30  import de.tivsource.page.entity.namingitem.NamingItem;
31  
32  /**
33   * @author Marc Michele
34   *
35   */
36  public class RestoreEvent {
37  
38      /**
39       * Statischer Logger der Klasse.
40       */
41      private static final Logger LOGGER = LogManager.getLogger(RestoreEvent.class);
42  
43      private LocationDaoLocal locationDaoLocal;
44  
45      private EventDaoLocal eventDaoLocal;
46  
47      private PictureDaoLocal pictureDaoLocal;
48  
49      public RestoreEvent(LocationDaoLocal locationDaoLocal, EventDaoLocal eventDaoLocal, PictureDaoLocal pictureDaoLocal) {
50          super();
51          this.locationDaoLocal = locationDaoLocal;
52          this.eventDaoLocal = eventDaoLocal;
53          this.pictureDaoLocal = pictureDaoLocal;
54      }
55  
56      public void generate(InputStream inputStream) {
57          LOGGER.debug("generate(InputStream inputStream) aufgerufen");
58          cleanup();
59          BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
60          try {
61              String line = null;
62              while ((line = in.readLine()) != null) {
63                  if (!line.startsWith("[Format Definition]")) {
64                      Event event = convert(line);
65                      eventDaoLocal.merge(event);
66                  }
67              }
68          } catch (IOException e) {
69              e.printStackTrace();
70          } catch (NoSuchAlgorithmException e) {
71              e.printStackTrace();
72          }
73      }
74  
75      private Event convert(String line) throws NoSuchAlgorithmException, UnsupportedEncodingException {
76  
77          // uuid|
78          // uuid(de)|name(de)|description(de)|keywords(de)|
79          // uuid(en)|name(en)|description(en)|keywords(en)|
80          // visible|created|modified|modifiedBy|modifiedAddress|
81      	// price|beginning|ending|deadline|location|reservation|picture|piwikGoal|maxReservations|maxPersons|pictureOnPage|
82  
83          // Zerlege CSV-Zeile in String-Array.
84          String[] items = line.split("\\|");
85  
86          // Erstelle Announcement-Objekt
87          Event event = new Event();
88  
89          event.setUuid(items[0]);
90  
91          Map<Language, Description> descriptionMap = new HashMap<Language, Description>();
92          descriptionMap.put(Language.DE, createDescription(
93                  items[1], items[2], items[3], 
94                  items[4], Language.DE, event));
95          descriptionMap.put(Language.EN, createDescription(
96                  items[5], items[6], items[7], 
97                  items[8], Language.EN, event));
98          event.setDescriptionMap(descriptionMap);
99  
100         event.setVisible(items[9].equals("true") ? true : false);
101         event.setCreated(convertDateString(items[10]));
102         event.setModified(convertDateString(items[11]));
103         event.setModifiedBy(items[12]);
104         event.setModifiedAddress(items[13]);
105         
106         event.setPrice(new BigDecimal(items[14]));
107         event.setBeginning(convertDateString(items[15]));
108         event.setEnding(convertDateString(items[16]));
109         event.setDeadline(convertDateString(items[17]));
110         
111         Location location = locationDaoLocal.findByUuidWidthEvents(items[18]);
112         location.getEvents().add(event);
113         event.setLocation(location);
114         
115         event.setReservation(items[19].equals("true") ? true : false);
116         event.setPicture(pictureDaoLocal.findByUuid(items[20]));
117         
118         event.setPiwikGoal(Integer.parseInt(items[21]));
119         event.setMaxReservations(Integer.parseInt(items[22]));
120         event.setMaxPersons(Integer.parseInt(items[23]));
121         event.setPictureOnPage(items[24].equals("true") ? true : false);
122 
123         return event;
124     }// Ende convert(String line)
125 
126     /**
127      * Methode zum Konvertieren eines Strings des Formates "1970-12-01 23:59:59" in ein Date-Object. 
128      * @param dateString
129      * @return
130      */
131     private Date convertDateString(String dateString) {
132         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
133         try {
134             return simpleDateFormat.parse(dateString);
135         } catch (ParseException e) {
136             return new Date();
137         }
138     }
139 
140     private Description createDescription(
141             String uuid, String name, String description, 
142             String keywords, Language language, NamingItem namingItem) {
143         Description pageDescription = new Description();
144         pageDescription.setUuid(uuid);
145         pageDescription.setName(name);
146         pageDescription.setDescription(description);
147         pageDescription.setKeywords(keywords);
148         pageDescription.setLanguage(language);
149         pageDescription.setNamingItem(namingItem);
150         return pageDescription;
151     }
152 
153     private void cleanup() {
154         if(eventDaoLocal.countAll() > 0) {
155             Iterator<Event> locationIterator = eventDaoLocal.findAll(0, eventDaoLocal.countAll()).iterator();
156             while(locationIterator.hasNext()) {
157                 Event next = locationIterator.next();
158                 eventDaoLocal.delete(next);
159             }
160         }
161     }// Ende cleanup()
162 
163 }// Ende class