package de.randi2.jsf.backingBeans; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import javax.faces.bean.ManagedProperty; import javax.faces.event.ActionEvent; import javax.faces.model.SelectItem; import lombok.Getter; import lombok.Setter; import de.randi2.jsf.controllerBeans.LoginHandler; import de.randi2.jsf.controllerBeans.TrialHandler; import de.randi2.jsf.converters.CriterionConverter; import de.randi2.jsf.wrappers.CriterionWrapper; import de.randi2.model.criteria.AbstractCriterion; /** * * @author L. Plotnicki * */ public abstract class AbstractSubjectProperty { protected int criterionWrapperId = 0; @ManagedProperty(value = "#{loginHandler}") @Getter @Setter protected LoginHandler loginHandler; @ManagedProperty(value = "#{trialHandler}") @Setter protected TrialHandler trialHandler; protected CriterionConverter criterionConverter; public CriterionConverter getCriterionConverter() { if (criterionConverter == null) criterionConverter = new CriterionConverter( loginHandler.getChosenLocale()); return criterionConverter; } @Getter @Setter private AbstractCriterion<?, ?> selectedCriterion; @Getter private String selectedCriterionString; public void setSelectedCriterionString(String selectedCriterionString) { this.selectedCriterionString = selectedCriterionString; try { selectedCriterion = criterionConverter.findGenderForl16edValue(selectedCriterionString); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private List<SelectItem> criteriaItems; public List<SelectItem> getCriteriaItems() { if (criteriaItems == null) { criteriaItems = new ArrayList<SelectItem>(); ResourceBundle rb = ResourceBundle.getBundle( "de.randi2.jsf.i18n.criteria", loginHandler.getChosenLocale()); for (AbstractCriterion<?, ?> c : trialHandler.getCriteriaList()) { String s = rb.getString(c.getClass() .getName()); criteriaItems.add(new SelectItem(s, s)); } } return criteriaItems; } protected ArrayList<CriterionWrapper<? extends Serializable>> criteria = null; @SuppressWarnings("unchecked") public void addCriterion(ActionEvent event) { if (selectedCriterion != null) try { if (criteria == null) getCriteria(); criteria.add(new CriterionWrapper<Serializable>( (AbstractCriterion<Serializable, ?>) selectedCriterion .getClass().newInstance(), loginHandler .getChosenLocale(), this, criterionWrapperId++)); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public void removeCriterion(ActionEvent event) { criteria.remove(this.getCriteria().size() - 1); } public boolean isCriteriaEmpty() { return getCriteria().isEmpty(); } public ArrayList<CriterionWrapper<? extends Serializable>> getCriteria() { if (criteria == null) criteria = new ArrayList<CriterionWrapper<? extends Serializable>>(); return criteria; } public void clean() { criteria = null; } }