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.text.ParseException;
11  import java.text.SimpleDateFormat;
12  import java.util.Date;
13  import java.util.HashMap;
14  import java.util.Iterator;
15  import java.util.Map;
16  
17  import org.apache.logging.log4j.LogManager;
18  import org.apache.logging.log4j.Logger;
19  
20  import de.tivsource.page.dao.location.LocationDaoLocal;
21  import de.tivsource.page.dao.picture.PictureDaoLocal;
22  import de.tivsource.page.dao.vacancy.VacancyDaoLocal;
23  import de.tivsource.page.entity.contentitem.Content;
24  import de.tivsource.page.entity.contentitem.ContentItem;
25  import de.tivsource.page.entity.enumeration.Language;
26  import de.tivsource.page.entity.namingitem.Description;
27  import de.tivsource.page.entity.namingitem.NamingItem;
28  import de.tivsource.page.entity.vacancy.Vacancy;
29  
30  /**
31   * @author Marc Michele
32   *
33   */
34  public class RestoreVacancy {
35  
36      /**
37       * Statischer Logger der Klasse.
38       */
39      private static final Logger LOGGER = LogManager.getLogger(RestoreVacancy.class);
40      
41      private VacancyDaoLocal vacancyDaoLocal;
42  
43      private LocationDaoLocal locationDaoLocal;
44  
45      private PictureDaoLocal pictureDaoLocal;
46  
47      private Map<String, InputStream> streams;
48  
49      public RestoreVacancy(VacancyDaoLocal vacancyDaoLocal, LocationDaoLocal locationDaoLocal, PictureDaoLocal pictureDaoLocal,
50              Map<String, InputStream> streams) {
51          super();
52          this.vacancyDaoLocal = vacancyDaoLocal;
53          this.locationDaoLocal = locationDaoLocal;
54          this.pictureDaoLocal = pictureDaoLocal;
55          this.streams = streams;
56      }
57  
58      /**
59       * Generiert aus der Datei die entsprechenden News-Einträge.
60       * @throws ParseException 
61       */
62      public void generate() {
63          LOGGER.info("generate() aufgerufen.");
64          cleanup();
65          BufferedReader in = new BufferedReader(
66                  new InputStreamReader(streams.get("vacancy.csv")));
67          try {
68              String line = null;
69              while ((line = in.readLine()) != null) {
70                  if (!line.startsWith("[Format Definition]")) {
71                      Vacancy vacancy = convert(line);
72                      vacancyDaoLocal.merge(vacancy);
73                  }
74              }
75          } catch (IOException e) {
76              e.printStackTrace();
77          }
78      }// Ende generate()
79      
80      private Vacancy convert(String line) {
81          // Zerlege CSV-Zeile in String-Array.
82          String[] items = line.split("\\|");
83  
84          // uuid|
85          // uuid(de)|name(de)|description(de)|keywords(de)|content_uuid(de)|content(de)|content_created(de)|content_modified(de)|
86          // uuid(en)|name(en)|description(en)|keywords(en)|content_uuid(en)|content(en)|content_created(en)|content_modified(en)|
87          // visible|created|modified|modifiedBy|ip|technical|beginning|workingTime|location|picture|pictureOnPage|
88  
89          Vacancy vacancy = new Vacancy();
90  
91          vacancy.setUuid(items[0]);
92  
93          Map<Language, Description> descriptionMap = new HashMap<Language, Description>();
94          descriptionMap.put(Language.DE, createDescription(
95                  items[1], items[2], items[3], 
96                  items[4], Language.DE, vacancy));
97          descriptionMap.put(Language.EN, createDescription(
98                  items[9], items[10], items[11], 
99                  items[12], Language.EN, vacancy));
100         vacancy.setDescriptionMap(descriptionMap);
101         
102         Map<Language, Content> contentMap = new HashMap<Language, Content>();
103         contentMap.put(Language.DE, createContent(
104                 items[5], items[6], convertDateString(items[7]), 
105                 convertDateString(items[8]), Language.DE, vacancy));
106         contentMap.put(Language.EN, createContent(
107                 items[13], items[14], convertDateString(items[15]), 
108                 convertDateString(items[16]), Language.EN, vacancy));
109         vacancy.setContentMap(contentMap);
110 
111         vacancy.setVisible(items[17].equals("true") ? true : false);
112         vacancy.setCreated(convertDateString(items[18]));
113         vacancy.setModified(convertDateString(items[19]));
114         vacancy.setModifiedBy(items[20]);
115         vacancy.setModifiedAddress(items[21]);
116         vacancy.setTechnical(items[22]);
117         vacancy.setBeginning(convertDateString(items[23]));
118         vacancy.setWorkingTime(items[24]);
119         vacancy.setLocation(locationDaoLocal.findByUuid(items[25]));
120         vacancy.setPicture(pictureDaoLocal.findByUuid(items[26]));
121         vacancy.setPictureOnPage(items[27].equals("true") ? true : false);
122 
123         return vacancy;
124     }
125 
126     private Description createDescription(
127             String uuid, String name, String description, 
128             String keywords, Language language, NamingItem namingItem) {
129         Description pageDescription = new Description();
130         pageDescription.setUuid(uuid);
131         pageDescription.setName(name);
132         pageDescription.setDescription(description);
133         pageDescription.setKeywords(keywords);
134         pageDescription.setLanguage(language);
135         pageDescription.setNamingItem(namingItem);
136         return pageDescription;
137     }
138 
139     private Content createContent(
140             String uuid, String filename, Date created, 
141             Date modified, Language language, ContentItem contentItem) {
142         BufferedReader inDE = new BufferedReader(new InputStreamReader(streams.get(filename)));
143         StringBuffer contentString = new StringBuffer();
144         try {
145             String lineDE = null;
146             while ((lineDE = inDE.readLine()) != null) {
147                 contentString.append(lineDE);
148             }
149         } catch (IOException e) {
150             e.printStackTrace();
151         }
152         
153         Content content = new Content();
154         content.setUuid(uuid);
155         content.setContent(contentString.toString());
156         content.setContentItem(contentItem);
157         content.setCreated(created);
158         content.setLanguage(language);
159         content.setModified(modified);
160         return content;
161     }
162 
163     /**
164      * Methode zum Konvertieren eines Strings des Formates "1970-12-01 23:59:59" in ein Date-Object. 
165      * @param dateString
166      * @return
167      */
168     private Date convertDateString(String dateString) {
169         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
170         try {
171             return simpleDateFormat.parse(dateString);
172         } catch (ParseException e) {
173             return new Date();
174         }
175     }// Ende convertDateString(String dateString)
176 
177     private void cleanup() {
178         if(vacancyDaoLocal.countAll() > 0) {
179             Iterator<Vacancy> pageIterator = vacancyDaoLocal.findAll(0, vacancyDaoLocal.countAll()).iterator();
180             while(pageIterator.hasNext()) {
181                 Vacancy next = pageIterator.next();
182                 vacancyDaoLocal.delete(next);
183             }
184         }
185     }// Ende cleanup()
186     
187 }// Ende class