View Javadoc

1   package de.tivsource.page.admin.actions.others.picture;
2   
3   import java.io.BufferedReader;
4   import java.io.File;
5   import java.io.FileInputStream;
6   import java.io.FileOutputStream;
7   import java.io.IOException;
8   import java.io.InputStream;
9   import java.io.InputStreamReader;
10  import java.util.Date;
11  import java.util.HashMap;
12  import java.util.List;
13  import java.util.Map;
14  import java.util.UUID;
15  
16  import org.apache.commons.codec.digest.DigestUtils;
17  import org.apache.logging.log4j.LogManager;
18  import org.apache.logging.log4j.Logger;
19  import org.apache.struts2.ServletActionContext;
20  import org.apache.struts2.convention.annotation.Action;
21  import org.apache.struts2.convention.annotation.Actions;
22  import org.apache.struts2.convention.annotation.Result;
23  import org.apache.struts2.tiles.annotation.TilesDefinition;
24  import org.apache.struts2.tiles.annotation.TilesDefinitions;
25  import org.apache.struts2.tiles.annotation.TilesPutAttribute;
26  
27  import de.tivsource.ejb3plugin.InjectEJB;
28  import de.tivsource.page.admin.actions.EmptyAction;
29  import de.tivsource.page.dao.gallery.GalleryDaoLocal;
30  import de.tivsource.page.dao.picture.PictureDaoLocal;
31  import de.tivsource.page.entity.enumeration.Language;
32  import de.tivsource.page.entity.gallery.Gallery;
33  import de.tivsource.page.entity.picture.Picture;
34  import de.tivsource.page.entity.picture.PictureUrl;
35  import de.tivsource.page.enumeration.UrlType;
36  
37  /**
38   * 
39   * @author Marc Michele
40   *
41   */
42  @TilesDefinitions({
43    @TilesDefinition(name="pictureAddForm",  extend = "adminTemplate", putAttributes = {
44      @TilesPutAttribute(name = "meta",       value = "/WEB-INF/tiles/active/meta/chosen.jsp"),
45      @TilesPutAttribute(name = "navigation", value = "/WEB-INF/tiles/active/navigation/others.jsp"),
46      @TilesPutAttribute(name = "content",    value = "/WEB-INF/tiles/active/view/picture/add_form.jsp")
47    })
48  })
49  public class AddAction extends EmptyAction {
50  
51  	/**
52  	 * Serial Version UID.
53  	 */
54  	private static final long serialVersionUID = -5152279376430754651L;
55  
56  	/**
57       * Statischer Logger der Klasse.
58       */
59      private static final Logger LOGGER = LogManager.getLogger(AddAction.class);
60  
61      @InjectEJB(name="PictureDao")
62      private PictureDaoLocal pictureDaoLocal;
63  
64      @InjectEJB(name="GalleryDao")
65      private GalleryDaoLocal galleryDaoLocal;
66  
67      private Picture picture;
68  
69      private File file;
70  
71      public Picture getPicture() {
72          return picture;
73      }
74  
75      public void setPicture(Picture picture) {
76          this.picture = picture;
77      }
78  
79      public void setFile(File file) {
80          this.file = file;
81      }
82  
83      @Override
84      @Actions({
85          @Action(
86          		value = "add", 
87          		results = { 
88          				@Result(name = "success", type = "redirectAction", location = "index.html"),
89          				@Result(name = "input", type="tiles", location = "pictureAddForm"),
90          				@Result(name = "error", type="tiles", location = "pictureAddError")
91          				}
92          )
93      })
94      public String execute() throws Exception {
95      	LOGGER.info("execute() aufgerufen.");
96  
97          String remoteUser    = ServletActionContext.getRequest().getRemoteUser();
98          String remoteAddress = ServletActionContext.getRequest().getRemoteAddr();
99  
100     	if(picture != null) {
101     	    picture.setUuid(UUID.randomUUID().toString());
102     	    picture.setModified(new Date());
103     	    picture.setCreated(new Date());
104     	    picture.setModifiedBy(remoteUser);
105     	    picture.setModifiedAddress(remoteAddress);
106 
107     	    picture.getDescriptionMap().get(Language.DE).setUuid(UUID.randomUUID().toString());
108     	    picture.getDescriptionMap().get(Language.DE).setPicture(picture);
109     	    picture.getDescriptionMap().get(Language.DE).setLanguage(Language.DE);
110     	    String noLineBreaks = picture.getDescriptionMap().get(Language.DE).getDescription().replaceAll("(\\r|\\n)", "");
111     	    picture.getDescriptionMap().get(Language.DE).setDescription(noLineBreaks);
112 
113     	    picture.getDescriptionMap().get(Language.EN).setUuid(UUID.randomUUID().toString());
114     	    picture.getDescriptionMap().get(Language.EN).setPicture(picture);
115     	    picture.getDescriptionMap().get(Language.EN).setLanguage(Language.EN);
116     	    picture.getDescriptionMap().get(Language.EN).setName(picture.getDescriptionMap().get(Language.DE).getName());
117     	    picture.getDescriptionMap().get(Language.EN).setDescription(picture.getDescriptionMap().get(Language.DE).getDescription());
118     	    picture.getDescriptionMap().get(Language.EN).setKeywords(picture.getDescriptionMap().get(Language.DE).getKeywords());
119 
120     	    
121     	    
122     	    if(file != null) {
123 
124                 // Pfad in dem die Bild Datei gespeichert wird.
125     	    	String generatePath = "/var/www/html/pictures/";
126                 String uploadPath = generatePath + "FULL/";
127 
128                 // Name der Bild Datei die erstellt werden soll. 
129                 String pictureSaveName = DigestUtils.shaHex("Hier ist das Geheimniss."
130                     + file.getName() + new Date() + "Noch ein bischen.")
131                     + ".png";
132 
133                 File fullPictureFileToCreate = new File(uploadPath, pictureSaveName);
134                 // Wenn die Datei noch nicht existiert wird Sie erstellt.
135                 if (!fullPictureFileToCreate.exists()) {
136                     savePictureFile(file, fullPictureFileToCreate);
137                 }
138 
139             	createNormal(uploadPath + pictureSaveName, generatePath
140             		+ "NORMAL/" + pictureSaveName);
141             	createThumbnail(uploadPath + pictureSaveName, generatePath
142             		+ "THUMBNAIL/" + pictureSaveName);
143             	createLarge(uploadPath + pictureSaveName, generatePath
144             		+ "LARGE/" + pictureSaveName);
145 
146             	// Setzte die Urls in das Bild.
147             	picture.setPictureUrls(generatePictureUrls(pictureSaveName, picture));
148     	    }
149 
150     	    // Speichere Bild in der Datenbank
151     	    pictureDaoLocal.merge(picture);
152             return SUCCESS;
153     	}
154     	else {
155     		return ERROR;
156     	}
157     	
158     	
159     }// Ende execute()
160 
161 	public List<Gallery> getGalleryList() {
162 		return galleryDaoLocal.findAll(0, galleryDaoLocal.countAll());
163 	}
164 
165     private static void savePictureFile(File source, File destination) throws Exception {
166         byte[] buffer = new byte[(int) source.length()];
167         InputStream in = new FileInputStream(source);
168         in.read(buffer);
169         FileOutputStream fileOutStream = new FileOutputStream(destination);
170         fileOutStream.write(buffer);
171         fileOutStream.flush();
172         fileOutStream.close();
173         in.close();
174     }
175 
176     private static void createNormal(String source, String destination) throws IOException {
177         String s = null;
178 
179         Process p = Runtime.getRuntime().exec(
180                 "/usr/bin/convert " + source
181                 + " -resize 600x500 -quality 85 -compress JPEG "
182                 + destination);
183         BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
184         BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
185 
186         while ((s = stdInput.readLine()) != null) {
187             System.out.println(s);
188         }
189 
190         while ((s = stdError.readLine()) != null) {
191             System.out.println(s);
192         }
193     }
194 
195     private static void createLarge(String source, String destination) throws IOException {
196         String s = null;
197 
198         Process p = Runtime.getRuntime().exec(
199                 "/usr/bin/convert " + source
200                 + " -resize 1000x1000 -quality 85 -compress JPEG "
201                 + destination);
202         BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
203         BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
204 
205         while ((s = stdInput.readLine()) != null) {
206             System.out.println(s);
207         }
208 
209         while ((s = stdError.readLine()) != null) {
210             System.out.println(s);
211         }
212     }
213 
214     private static void createThumbnail(String source, String destination) throws IOException {
215         String s = null;
216 
217         Process p = Runtime.getRuntime().exec(
218                 "/usr/bin/convert " + source
219                 + " -resize 200x143 -quality 85 -compress JPEG "
220                 + destination);
221         BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
222         BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
223 
224         while ((s = stdInput.readLine()) != null) {
225             System.out.println(s);
226         }
227 
228         while ((s = stdError.readLine()) != null) {
229             System.out.println(s);
230         }
231     }
232 
233     private static Map<UrlType, PictureUrl> generatePictureUrls(String pictureName, Picture pictureObject) {
234 
235         Map<UrlType, PictureUrl> pictureUrls = new HashMap<UrlType, PictureUrl>();
236         PictureUrl normalPictureUrl = new PictureUrl();
237         normalPictureUrl.setUuid(UUID.randomUUID().toString());
238         normalPictureUrl.setPicture(pictureObject);
239         normalPictureUrl.setUrl(pictureName);
240         normalPictureUrl.setUrlType(UrlType.NORMAL);
241 
242         PictureUrl largePictureUrl = new PictureUrl();
243         largePictureUrl.setUuid(UUID.randomUUID().toString());
244         largePictureUrl.setPicture(pictureObject);
245         largePictureUrl.setUrl(pictureName);
246         largePictureUrl.setUrlType(UrlType.LARGE);
247 
248         PictureUrl thumbnailPictureUrl = new PictureUrl();
249         thumbnailPictureUrl.setUuid(UUID.randomUUID().toString());
250         thumbnailPictureUrl.setPicture(pictureObject);
251         thumbnailPictureUrl.setUrl(pictureName);
252         thumbnailPictureUrl.setUrlType(UrlType.THUMBNAIL);
253 
254         PictureUrl fullPictureUrl = new PictureUrl();
255         fullPictureUrl.setUuid(UUID.randomUUID().toString());
256         fullPictureUrl.setPicture(pictureObject);
257         fullPictureUrl.setUrl(pictureName);
258         fullPictureUrl.setUrlType(UrlType.FULL);
259 
260         pictureUrls.put(UrlType.NORMAL, normalPictureUrl);
261         pictureUrls.put(UrlType.LARGE, largePictureUrl);
262         pictureUrls.put(UrlType.THUMBNAIL, thumbnailPictureUrl);
263         pictureUrls.put(UrlType.FULL, fullPictureUrl);
264 
265         return pictureUrls;
266     }
267     
268 }// Ende class