4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
UploadDocument.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Author: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz
4  * File: UploadDocument.java
5  * Description: Backbean for page for uploading documents
6  */
7 
8 /**
9  * @file UploadDocument.java
10  *
11  * @brief Backbean for page for uploading documents
12  */
13 
14 package cz.vutbr.fit.knot.annotations.web;
15 
21 import java.io.IOException;
22 import java.io.Serializable;
23 import java.io.StringWriter;
24 import java.util.List;
25 import javax.faces.bean.ManagedBean;
26 import javax.faces.bean.ViewScoped;
27 import javax.persistence.EntityManager;
28 import javax.persistence.EntityTransaction;
29 import org.apache.commons.io.IOUtils;
30 import org.apache.myfaces.custom.fileupload.UploadedFile;
31 
32 /**
33  * Backbean for page for uploading documents
34  *
35  * @brief Backbean for for page for uploading documents
36  * @author idytrych
37  */
38 @ManagedBean
39 @ViewScoped
40 public class UploadDocument implements Serializable {
41  /**
42  * Error message displayed in form
43  */
44  private String errorMessage = "";
45  /**
46  * Success message displayed in form
47  */
48  private String successMessage = "";
49  /**
50  * Uploaded file
51  */
52  private UploadedFile uploadedFile;
53  /**
54  * File name
55  */
56  private String fileName;
57  /**
58  * User group in which uploaded types will be shared
59  */
60  private String uGroup;
61 
62  /**
63  * Action listener for upload button
64  *
65  * @return Returns page outcome (identificator of next page or null to stay here)
66  */
67  public String btnUploadAction() {
68 
69  errorMessage = "";
70  successMessage = "";
71 
72  if (uGroup.isEmpty()) {
73  errorMessage = MessageProvider.getMessage("groupMustBeSet");
74  return null;
75  }
76  // query database for user group
77  Object[] params = new Object[2]; // parameters for database query
78  params[0] = "name";
79  params[1] = uGroup;
80  List gList = AppBean.getPersistenceManager().queryDB("UserGroup.findByName", params);
81  UserGroup userGroup = null;
82  if (gList != null && !gList.isEmpty()) { // if group was found
83  userGroup = (UserGroup) gList.get(0);
84  } else {
85  errorMessage = MessageProvider.getMessage("unknownGroup");
86  return null;
87  }
88 
89  // Informations about uploaded file
90  String fileType = uploadedFile.getContentType();
91  String fileNameStr = uploadedFile.getName();
92  // Long fileSize = uploadedFile.getSize(); // bytes
93 
94  // Create writer with file data
95  StringWriter fWriter = new StringWriter();
96  try {
97  IOUtils.copy(uploadedFile.getInputStream(), fWriter);
98  } catch (IOException ex) {
99  errorMessage = MessageProvider.getMessage("uploadingError");
100  return null;
101  }
102 
103  // check document type
104  if (!Constants.DOC_UPLOAD_TYPES.contains(fileType)) {
105  errorMessage = MessageProvider.getMessage("unsupportedDocType") + ": " + fileType;
106  return null;
107  }
108 
109  // gets logged in user
110  User user = SessionManager.getSession().getLoggedUser();
111 
112  // Create document entity
113  StoredDocument newDoc = new StoredDocument(fileNameStr, fileType, user, userGroup, fWriter.toString());
114 
115  // persist document to database
116  EntityManager em = AppBean.getPersistenceManager().getEM();
117  EntityTransaction transaction = em.getTransaction();
118  try {
119  transaction.begin();
120  newDoc.setUri(newDoc.getGeneratedUri()); // bad URI - must be updated later (but must be filled to commit)
121  newDoc = em.merge(newDoc); // persist document
122  em.flush();
123  transaction.commit();
124  } catch (Exception e) {
125  transaction.rollback();
126  errorMessage = errorMessage + MessageProvider.getMessage("documentPersistingError") + "<br/>";
127  return null;
128  } finally {
129  em.close();
130  }
131 
132  // Generate and store URI
133  newDoc.setUri(newDoc.getGeneratedUri());
134  AppBean.getPersistenceManager().saveEntityChanges(newDoc);
135 
136  // display message about success
137  successMessage = MessageProvider.getMessage("uploadSuccessfull");
138 
139  return "documents";
140  } // btnUploadAction()
141 
142  /**
143  * Action listener for back button
144  *
145  * @return Returns page outcome (identificator of next page)
146  */
147  public String btnCancelAction() {
148  return "documents";
149  }
150 
151  /**
152  * Gets uploaded file
153  *
154  * @return Returns uploaded file
155  */
156  public UploadedFile getUploadedFile() {
157  return uploadedFile;
158  }
159 
160  /**
161  * Sets uploaded file
162  *
163  * @param uploadedFile Uploaded file
164  */
165  public void setUploadedFile(UploadedFile uploadedFile) {
166  this.uploadedFile = uploadedFile;
167  }
168 
169  /**
170  * Gets uploaded file name
171  *
172  * @return Returns uploaded file name
173  */
174  public String getFileName() {
175  return fileName;
176  }
177 
178  /**
179  * Gets error message displayed in form
180  *
181  * @return Returns error message displayed in form
182  */
183  public String getErrorMessage() {
184  return errorMessage;
185  }
186 
187  /**
188  * Sets error message to be displayed in form
189  *
190  * @param errorMessage Error message to be displayed in form
191  */
192  public void setErrorMessage(String errorMessage) {
193  this.errorMessage = errorMessage;
194  }
195 
196  /**
197  * Gets success message displayed in form
198  *
199  * @return Returns success message displayed in form
200  */
201  public String getSuccessMessage() {
202  return successMessage;
203  }
204 
205  /**
206  * Sets success message to be displayed in form
207  *
208  * @param successMessage Success message to be displayed in form
209  */
210  public void setSuccessMessage(String successMessage) {
211  this.successMessage = successMessage;
212  }
213 
214  /**
215  * Gets user group in which uploaded types will be shared
216  *
217  * @return Returns user group in which uploaded types will be shared
218  */
219  public String getuGroup() {
220  return uGroup;
221  }
222 
223  /**
224  * Sets user group in which uploaded types will be shared
225  *
226  * @param uGroup User group in which uploaded types will be shared
227  */
228  public void setuGroup(String uGroup) {
229  this.uGroup = uGroup;
230  }
231 
232 } // public class UploadDocument
Singleton for storing global variables.
Definition: AppBean.java:47
Class representing user group.
Definition: UserGroup.java:47
void setUploadedFile(UploadedFile uploadedFile)
Class representing user.
Definition: User.java:51
static final ArrayList< String > DOC_UPLOAD_TYPES
Definition: Constants.java:319
Backbean for for page for uploading documents.