1 package org.ufcspa.simdecs.bn.ui;
3 import org.ufcspa.simdecs.bn.entity.Answer;
4 import org.ufcspa.simdecs.bn.ui.util.JsfUtil;
5 import org.ufcspa.simdecs.bn.ui.util.PaginationHelper;
6 import org.ufcspa.simdecs.bn.jpa.AnswerJpaController;
8 import java.io.Serializable;
9 import java.util.ResourceBundle;
10 import javax.annotation.Resource;
11 import javax.faces.bean.ManagedBean;
12 import javax.faces.bean.SessionScoped;
13 import javax.faces.component.UIComponent;
14 import javax.faces.context.FacesContext;
15 import javax.faces.convert.Converter;
16 import javax.faces.convert.FacesConverter;
17 import javax.faces.model.DataModel;
18 import javax.faces.model.ListDataModel;
19 import javax.faces.model.SelectItem;
20 import javax.persistence.EntityManagerFactory;
21 import javax.persistence.PersistenceUnit;
22 import javax.transaction.UserTransaction;
24 @ManagedBean(name = "answerController")
26 public class AnswerController implements Serializable {
29 private UserTransaction utx = null;
30 @PersistenceUnit(unitName = "simdecsEclipseLinkPU")
31 private EntityManagerFactory emf = null;
32 private Answer current;
33 private DataModel items = null;
34 private AnswerJpaController jpaController = null;
35 private PaginationHelper pagination;
36 private int selectedItemIndex;
38 public AnswerController() {
41 public Answer getSelected() {
42 if (current == null) {
43 current = new Answer();
44 selectedItemIndex = -1;
49 private AnswerJpaController getJpaController() {
50 if (jpaController == null) {
51 jpaController = new AnswerJpaController(utx, emf);
56 public PaginationHelper getPagination() {
57 if (pagination == null) {
58 pagination = new PaginationHelper(10) {
61 public int getItemsCount() {
62 return getJpaController().getAnswerCount();
66 public DataModel createPageDataModel() {
67 return new ListDataModel(getJpaController().findAnswerEntities(getPageSize(), getPageFirstItem()));
74 public String prepareList() {
79 public String prepareView() {
80 current = (Answer) getItems().getRowData();
81 selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
85 public String prepareCreate() {
86 current = new Answer();
87 selectedItemIndex = -1;
91 public String create() {
93 getJpaController().create(current);
94 JsfUtil.addSuccessMessage(ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("AnswerCreated"));
95 return prepareCreate();
96 } catch (Exception e) {
97 JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("PersistenceErrorOccured"));
102 public String prepareEdit() {
103 current = (Answer) getItems().getRowData();
104 selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
108 public String update() {
110 getJpaController().edit(current);
111 JsfUtil.addSuccessMessage(ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("AnswerUpdated"));
113 } catch (Exception e) {
114 JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("PersistenceErrorOccured"));
119 public String destroy() {
120 current = (Answer) getItems().getRowData();
121 selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
123 recreatePagination();
128 public String destroyAndView() {
132 if (selectedItemIndex >= 0) {
135 // all items were removed - go back to list
141 private void performDestroy() {
143 getJpaController().destroy(current.getId());
144 JsfUtil.addSuccessMessage(ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("AnswerDeleted"));
145 } catch (Exception e) {
146 JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("org/ufcspa/simdecs/bn/Bundle").getString("PersistenceErrorOccured"));
150 private void updateCurrentItem() {
151 int count = getJpaController().getAnswerCount();
152 if (selectedItemIndex >= count) {
153 // selected index cannot be bigger than number of items:
154 selectedItemIndex = count - 1;
155 // go to previous page if last page disappeared:
156 if (pagination.getPageFirstItem() >= count) {
157 pagination.previousPage();
160 if (selectedItemIndex >= 0) {
161 current = getJpaController().findAnswerEntities(1, selectedItemIndex).get(0);
165 public DataModel getItems() {
167 items = getPagination().createPageDataModel();
172 private void recreateModel() {
176 private void recreatePagination() {
180 public String next() {
181 getPagination().nextPage();
186 public String previous() {
187 getPagination().previousPage();
192 public SelectItem[] getItemsAvailableSelectMany() {
193 return JsfUtil.getSelectItems(getJpaController().findAnswerEntities(), false);
196 public SelectItem[] getItemsAvailableSelectOne() {
197 return JsfUtil.getSelectItems(getJpaController().findAnswerEntities(), true);
200 @FacesConverter(forClass = Answer.class)
201 public static class AnswerControllerConverter implements Converter {
203 public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
204 if (value == null || value.length() == 0) {
207 AnswerController controller = (AnswerController) facesContext.getApplication().getELResolver().
208 getValue(facesContext.getELContext(), null, "answerController");
209 return controller.getJpaController().findAnswer(getKey(value));
212 java.lang.Long getKey(String value) {
214 key = Long.valueOf(value);
218 String getStringKey(java.lang.Long value) {
219 StringBuffer sb = new StringBuffer();
221 return sb.toString();
224 public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
225 if (object == null) {
228 if (object instanceof Answer) {
229 Answer o = (Answer) object;
230 return getStringKey(o.getId());
232 throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + AnswerController.class.getName());