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