4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
EditUG.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: EditUG.java
5  * Description: Backbean for pages for adding, editing and deleting of user group
6  */
7 
8 /**
9  * @file EditUG.java
10  *
11  * @brief Backbean for adding, editing and deleting of user group
12  */
13 
14 package cz.vutbr.fit.knot.annotations.web;
15 
20 import java.io.Serializable;
21 import java.util.List;
22 import java.util.logging.Level;
23 import java.util.logging.Logger;
24 import javax.faces.bean.ManagedBean;
25 import javax.faces.bean.ViewScoped;
26 import javax.faces.component.html.HtmlDataTable;
27 import javax.persistence.EntityManager;
28 import javax.persistence.EntityTransaction;
29 
30 /**
31  * Backbean for pages for adding, editing and deleting of user group
32  *
33  * @brief Backbean for adding, editing and deleting of user group
34  * @author idytrych
35  */
36 @ManagedBean
37 @ViewScoped
38 public class EditUG implements Serializable {
39  /**
40  * Value of user group name field in form
41  */
42  private String name = null;
43  /**
44  * Error message displayed in form
45  */
46  private String errorMessage = "";
47  /**
48  * Table with users in given user group
49  */
50  private HtmlDataTable listTable;
51  /**
52  * User selected in the table
53  */
54  private User user;
55  /**
56  * Edited user group or user group to be deleted
57  */
58  private UserGroup userGroup = null;
59 
60  /**
61  * Constructor
62  */
63  public EditUG() {
64  }
65 
66  /**
67  * Action listener for save button in the page for editing of the user group
68  *
69  * @return Returns page outcome (identificator of next page or null to stay here)
70  */
71  public String btnSaveAction() {
72  if (name.isEmpty()) { // if name is empty
73  errorMessage = MessageProvider.getMessage("nameCantBeEmpty");
74  return null;
75  }
76 
77  userGroup.setName(name); // update user group
78  // persist changes
79  UserGroup saved = (UserGroup) AppBean.getPersistenceManager().saveEntityChanges(userGroup);
80  if (saved == null) {
81  errorMessage = MessageProvider.getMessage("changesNSDatabaseFailure");
83  String msg = "Persisting of changes in the user group failed.";
84  Logger.getLogger(EditUG.class.getName()).log(Level.SEVERE, msg);
85  }
86  return null;
87  } else { // if changes was successfully saved
88  userGroup = saved;
89  }
90 
91  AppBean.refreshUsersInSessions(null); // refreshes data in sessions
92 
93  SessionManager.getSession().setFormBackup(null);
94  SessionManager.getSession().setEditedUG(null);
95  return "userGroups";
96  } // btnSaveAction()
97 
98  /**
99  * Action listener for seve button on page for adding new groups
100  *
101  * @return Returns page outcome (identificator of next page or null to stay here)
102  */
103  public String btnSaveNewAction() {
104  if (name.isEmpty()) {
105  errorMessage = MessageProvider.getMessage("nameCantBeEmpty");
106  return null;
107  }
108 
109  userGroup = new UserGroup(name); // create new user group
110 
111  // persist new group
112  if (AppBean.getPersistenceManager().persistEntity(userGroup)) {
113  errorMessage = MessageProvider.getMessage("newGroupNSDatabaseFailure");
115  String msg = "Persisting of new user group failed.";
116  Logger.getLogger(EditUG.class.getName()).log(Level.SEVERE, msg);
117  }
118  return null;
119  }
120 
121  SessionManager.getSession().setFormBackup(null);
122  SessionManager.getSession().setEditedUG(null);
123  return "userGroups";
124  } // btnSaveNewAction()
125 
126  /**
127  * Action listener for cancel button
128  *
129  * @return Returns page outcome (identificator of next page or null to stay here)
130  */
131  public String btnCancelAction() {
132  SessionManager.getSession().setFormBackup(null);
133  SessionManager.getSession().setEditedUG(null); // clean up variable in session
134  return "userGroups";
135  }
136 
137  /**
138  * Action listener for delete button on deleting page
139  *
140  * @return Returns page outcome (identificator of next page or null to stay here)
141  */
142  public String btnDeleteAction() {
143  if (userGroup.getName().equalsIgnoreCase(Constants.ADMIN_GROUP)) {
144  errorMessage = MessageProvider.getMessage("deleteAdmins");
145  return null;
146  }
147 
148  // find annotation types in this group
149  Object[] params = new Object[2];
150  params[0] = "id";
151  params[1] = userGroup.getId();
152  List gList = AppBean.getPersistenceManager().queryDB("AnnotType.findByUserGroup", params);
153  if (gList != null && !gList.isEmpty()) { // if annotation type was found
154  errorMessage = MessageProvider.getMessage("ifTypesExistsGroupCantBeDeleted");
155  return null;
156  }
157 
158  if (!userGroup.getUsers().isEmpty()) {
159  errorMessage = MessageProvider.getMessage("ifUsersExistsGroupCantBeDeleted");
160  return null;
161  }
162 
163  if (AppBean.getPersistenceManager().removeEntity(userGroup)) {
164  errorMessage = MessageProvider.getMessage("groupCantBeDeletedDatabaseFailure");
166  String msg = "Deleting of the user group failed.";
167  Logger.getLogger(EditUG.class.getName()).log(Level.SEVERE, msg);
168  }
169  return null;
170  }
171 
172  SessionManager.getSession().setFormBackup(null);
173  SessionManager.getSession().setEditedUG(null);
174  return "userGroups";
175  } // btnDeleteAction()
176 
177  /**
178  * Gets edited user group
179  * If user group not set yet, pick up it from session
180  *
181  * @return Returns edited user group
182  */
184  if (userGroup == null) {
185  userGroup = SessionManager.getSession().getEditedUG();
186  }
187  return userGroup;
188  }
189 
190  /**
191  * Sets edited user group
192  *
193  * @param userGroup Edited user group
194  */
196  this.userGroup = userGroup;
197  }
198 
199  /**
200  * Gets value of user group name field in form
201  * If user group not set yet, pick up it from session
202  *
203  * @return Returns value of user group name field in form
204  */
205  public String getName() {
206  if (userGroup == null) {
207  userGroup = SessionManager.getSession().getEditedUG();
208  }
209  UserGroup backup = null;
210  if (SessionManager.getSession().getFormBackup() != null) {
211  if (SessionManager.getSession().getFormBackup().getClass().getName().endsWith("UserGroup")) {
212  backup = (UserGroup) SessionManager.getSession().getFormBackup();
213  if (backup.getId() != userGroup.getId()) {
214  backup = null;
215  }
216  }
217  }
218  if (name == null && backup != null) {
219  name = backup.getName();
220  } else if (name == null && userGroup != null) {
221  name = userGroup.getName();
222  } else if (name == null) {
223  name = "";
224  }
225  return name;
226  }
227 
228  /**
229  * Sets value of user group name field in form
230  *
231  * @param name Value of user group name field in form
232  */
233  public void setName(String name) {
234  this.name = name;
235  }
236 
237  /**
238  * Gets error message displayed in form
239  *
240  * @return Returns error message displayed in form
241  */
242  public String getErrorMessage() {
243  return errorMessage;
244  }
245 
246  /**
247  * Sets error message to be displayed in form
248  *
249  * @param errorMessage Error message to be displayed in form
250  */
251  public void setErrorMessage(String errorMessage) {
252  this.errorMessage = errorMessage;
253  }
254 
255  /**
256  * Gets table with users in given user group
257  *
258  * @return Returns table with users in given user group
259  */
260  public HtmlDataTable getListTable() {
261  return listTable;
262  }
263 
264  /**
265  * Sets table with users in given user group
266  *
267  * @param listTable Table with users in given user group
268  */
269  public void setListTable(HtmlDataTable listTable) {
270  this.listTable = listTable;
271  }
272 
273  /**
274  * Gets list of all users in edited user group
275  *
276  * @return List of all users in edited user group
277  */
278  public List<User> getUsersList() {
279  if (userGroup == null) {
280  userGroup = SessionManager.getSession().getEditedUG();
281  }
282  return userGroup.getUsers();
283  }
284 
285  /**
286  * Gets user selected in the table
287  *
288  * @return Returns user selected in the table
289  */
290  public User getUser() {
291  return user;
292  }
293 
294  /**
295  * Sets user selected in the table
296  *
297  * @param user User selected in the table
298  */
299  public void setUser(User user) {
300  this.user = user;
301  }
302 
303  /**
304  * Action listener for remove link in the table. Removes user from user group
305  *
306  * @param id Id of removed user
307  * @return Returns null to stay in this page
308  */
309  public String actionRemoveUser(Integer id) {
310  if (userGroup.getName().equalsIgnoreCase(Constants.ADMIN_GROUP) && userGroup.getUsers().size() < 2) {
311  // the last administrator can't be removed
312  errorMessage = MessageProvider.getMessage("removeLastAdmin");
313  return null;
314  }
315  // get selected row data
316  User refU = new User(id);
317  int index = getUsersList().indexOf(refU);
318  user = getUsersList().get(index);
319  try {
320  EntityManager em = AppBean.getPersistenceManager().getEM();
321  EntityTransaction transaction = em.getTransaction();
322  transaction.begin();
323  user = em.merge(user);
324  userGroup = em.merge(userGroup);
325  userGroup.getUsers().remove(user); // remove user from group
326  user.getGroups().remove(userGroup);
327  em.flush();
328  transaction.commit();
329  } catch (Exception e) {
330  errorMessage = MessageProvider.getMessage("userCantBeREmovedDF");
332  String msg = "Removing of user from the user group failed.";
333  Logger.getLogger(EditUG.class.getName()).log(Level.SEVERE, msg, e);
334  }
335  return null;
336  }
337 
338  AppBean.refreshUsersInSessions(user); // refreshes data in sessions
339  return null;
340  } // actionRemoveUser()
341 
342  /**
343  * Action listener for link for add user to edited group
344  *
345  * @return Returns page outcome (identificator of transition)
346  */
347  public String actionAddUser() {
348  UserGroup backup = new UserGroup(userGroup.getId(),name);
349  SessionManager.getSession().setFormBackup(backup);
350  SessionManager.getSession().setEditedUG(userGroup);
351  return "selectUser";
352  }
353 
354 } // public class EditUG
Class for manipulating with session.
Singleton for storing global variables.
Definition: AppBean.java:47
void setUserGroup(UserGroup userGroup)
Definition: EditUG.java:195
Class representing user group.
Definition: UserGroup.java:47
Class representing user.
Definition: User.java:51
void setListTable(HtmlDataTable listTable)
Definition: EditUG.java:269
Backbean for adding, editing and deleting of user group.
Definition: EditUG.java:38
void setErrorMessage(String errorMessage)
Definition: EditUG.java:251