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