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.page.PageDaoLocal;
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.page.Page;
28  
29  /**
30   * @author Marc Michele
31   *
32   */
33  public class RestorePage {
34  
35      /**
36       * Statischer Logger der Klasse.
37       */
38      private static final Logger LOGGER = LogManager.getLogger(RestorePage.class);
39      
40      private PageDaoLocal pageDaoLocal;
41  
42      private PictureDaoLocal pictureDaoLocal;
43  
44      private Map<String, InputStream> streams;
45  
46      public RestorePage(PageDaoLocal pageDaoLocal, PictureDaoLocal pictureDaoLocal,
47              Map<String, InputStream> streams) {
48          super();
49          this.pageDaoLocal = pageDaoLocal;
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("page.csv")));
63          try {
64              String line = null;
65              while ((line = in.readLine()) != null) {
66                  if (!line.startsWith("[Format Definition]")) {
67                      Page page = convert(line);
68                      pageDaoLocal.merge(page);
69                  }
70              }
71          } catch (IOException e) {
72              e.printStackTrace();
73          }
74      }// Ende generate()
75      
76      private Page 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|technical|special|topNavigation|topNavigationOrder|navigation|
84  	    // navigationOrder|bottomNavigation|bottomNavigationOrder|responsiveNavigation|responsiveNavigationOrder|picture|pictureOnPage|
85  
86  
87          Page page = new Page();
88  
89          page.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, page));
95          descriptionMap.put(Language.EN, createDescription(
96                  items[9], items[10], items[11], 
97                  items[12], Language.EN, page));
98          page.setDescriptionMap(descriptionMap);
99          
100         Map<Language, Content> contentMap = new HashMap<Language, Content>();
101         contentMap.put(Language.DE, createContent(
102                 items[5], items[6], convertDateString(items[7]), 
103                 convertDateString(items[8]), Language.DE, page));
104         contentMap.put(Language.EN, createContent(
105                 items[13], items[14], convertDateString(items[15]), 
106                 convertDateString(items[16]), Language.EN, page));
107         page.setContentMap(contentMap);
108 
109         page.setVisible(items[17].equals("true") ? true : false);
110         page.setCreated(convertDateString(items[18]));
111         page.setModified(convertDateString(items[19]));
112         page.setModifiedBy(items[20]);
113         page.setModifiedAddress(items[21]);
114         page.setTechnical(items[22]);
115         page.setSpecial(items[23].equals("true") ? true : false);
116         page.setPicture(pictureDaoLocal.findByUuid(items[24]));
117         page.setPictureOnPage(items[25].equals("true") ? true : false);
118         
119         return page;
120     }
121 
122     private Description createDescription(
123             String uuid, String name, String description, 
124             String keywords, Language language, NamingItem namingItem) {
125         Description pageDescription = new Description();
126         pageDescription.setUuid(uuid);
127         pageDescription.setName(name);
128         pageDescription.setDescription(description);
129         pageDescription.setKeywords(keywords);
130         pageDescription.setLanguage(language);
131         pageDescription.setNamingItem(namingItem);
132         return pageDescription;
133     }
134 
135     private Content createContent(
136             String uuid, String filename, Date created, 
137             Date modified, Language language, ContentItem contentItem) {
138         BufferedReader inDE = new BufferedReader(new InputStreamReader(streams.get(filename)));
139         StringBuffer contentString = new StringBuffer();
140         try {
141             String lineDE = null;
142             while ((lineDE = inDE.readLine()) != null) {
143                 contentString.append(lineDE);
144             }
145         } catch (IOException e) {
146             e.printStackTrace();
147         }
148         
149         Content content = new Content();
150         content.setUuid(uuid);
151         content.setContent(contentString.toString());
152         content.setContentItem(contentItem);
153         content.setCreated(created);
154         content.setLanguage(language);
155         content.setModified(modified);
156         return content;
157     }
158 
159     /**
160      * Methode zum Konvertieren eines Strings des Formates "1970-12-01 23:59:59" in ein Date-Object. 
161      * @param dateString
162      * @return
163      */
164     private Date convertDateString(String dateString) {
165         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
166         try {
167             return simpleDateFormat.parse(dateString);
168         } catch (ParseException e) {
169             return new Date();
170         }
171     }// Ende convertDateString(String dateString)
172 
173     private void cleanup() {
174         if(pageDaoLocal.countAll() > 0) {
175             Iterator<Page> pageIterator = pageDaoLocal.findAll(0, pageDaoLocal.countAll()).iterator();
176             while(pageIterator.hasNext()) {
177                 Page next = pageIterator.next();
178                 pageDaoLocal.delete(next);
179             }
180         }
181     }// Ende cleanup()
182     
183 }// Ende class