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