package net.sourceforge.fenixedu.domain.phd.migration; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import net.sourceforge.fenixedu.domain.ExecutionYear; import net.sourceforge.fenixedu.domain.phd.PhdProgram; import pt.utl.ist.fenix.tools.predicates.AndPredicate; import pt.utl.ist.fenix.tools.predicates.InlinePredicate; import pt.utl.ist.fenix.tools.util.i18n.Language; public class SearchPhdMigrationProcessBean implements Serializable { static private final long serialVersionUID = -5653277152319382139L; public static enum SearchCriterion { PHD_STUDENT_NUMBER } public static enum FilterMigratedProcesses { FILTER_MIGRATED, FILTER_NOT_MIGRATED, NO_FILTER; public String getLocalizedName() { return getLocalizedName(Language.getLocale()); } public String getLocalizedName(final Locale locale) { return ResourceBundle.getBundle("resources.PhdResources", locale).getString(getQualifiedName()); } public String getQualifiedName() { return getClass().getSimpleName() + "." + name(); } } private SearchCriterion searchCriterion = SearchCriterion.PHD_STUDENT_NUMBER; private String searchValue; private ExecutionYear executionYear; private PhdMigrationProcessStateType processState; private Integer phdStudentNumber; private List phdPrograms; private Boolean filterPhdPrograms = Boolean.TRUE; private List processes; private Boolean filterPhdProcesses = Boolean.TRUE; private FilterMigratedProcesses filterNotMigratedProcesses = FilterMigratedProcesses.NO_FILTER; public String getSearchValue() { return searchValue; } public void setSearchValue(String searchValue) { this.searchValue = searchValue; } public void setSearchCriterion(SearchCriterion searchCriterion) { this.searchCriterion = searchCriterion; } public SearchCriterion getSearchCriterion() { return searchCriterion; } public Boolean getFilterPhdPrograms() { return filterPhdPrograms; } public void setFilterPhdPrograms(Boolean filterPhdPrograms) { this.filterPhdPrograms = filterPhdPrograms; } public Boolean getFilterPhdProcesses() { return filterPhdProcesses; } public void setFilterPhdProcesses(Boolean filterPhdProcesses) { this.filterPhdProcesses = filterPhdProcesses; } public List getPhdPrograms() { final List result = new ArrayList(); for (final PhdProgram each : this.phdPrograms) { result.add(each); } return result; } public void setPhdPrograms(List phdPrograms) { setPhdPrograms((Collection) phdPrograms); } public void setPhdPrograms(Collection phdPrograms) { final List result = new ArrayList(); for (final PhdProgram each : phdPrograms) { result.add(each); } this.phdPrograms = result; } public ExecutionYear getExecutionYear() { return this.executionYear; } public void setExecutionYear(ExecutionYear executionYear) { this.executionYear = executionYear; } public PhdMigrationProcessStateType getProcessState() { return processState; } public void setProcessState(PhdMigrationProcessStateType processState) { this.processState = processState; } public List getProcesses() { final List result = new ArrayList(); for (final PhdMigrationIndividualProcessData each : this.processes) { result.add(each); } return result; } public void setProcesses(List processes) { final List result = new ArrayList(); for (final PhdMigrationIndividualProcessData each : processes) { result.add(each); } this.processes = result; } public AndPredicate getPredicates() { if (getSearchValue() != null && !getSearchValue().isEmpty()) { String searchValue = getSearchValue().trim(); setPhdStudentNumber((getSearchCriterion() == SearchCriterion.PHD_STUDENT_NUMBER) ? Integer.valueOf(searchValue) : null); } final AndPredicate result = new AndPredicate(); result.add(getManagedPhdProgramsAndProcessesPredicate()); if (getPhdStudentNumber() != null) { result.add(new InlinePredicate(getPhdStudentNumber()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { return toEval.getNumber() != null && toEval.getNumber().compareTo(getValue()) == 0; } }); return result; } return getAndPredicate(); } public AndPredicate getAndPredicate() { final AndPredicate result = new AndPredicate(); result.add(getManagedPhdProgramsAndProcessesPredicate()); if (getExecutionYear() != null) { result.add(new InlinePredicate(getExecutionYear()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { return toEval.getExecutionYear() == getValue(); } }); } if (getProcessState() != null) { result.add(new InlinePredicate(getProcessState()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { return toEval.getMigrationStatus() == getValue(); } }); } return result; } private AndPredicate getManagedPhdProgramsAndProcessesPredicate() { final AndPredicate result = new AndPredicate(); if (getFilterPhdPrograms() != null && getFilterPhdPrograms().booleanValue()) { result.add(new InlinePredicate>(getPhdPrograms()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { if (toEval.getProcessBean().hasPhdProgram()) { return getValue().contains(toEval.getProcessBean().getPhdProgram()); } else { return false; } } }); } if (getFilterNotMigratedProcesses() != null && !getFilterNotMigratedProcesses().equals(FilterMigratedProcesses.NO_FILTER)) { result.add(new InlinePredicate( getFilterNotMigratedProcesses()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { if (getValue().equals(FilterMigratedProcesses.FILTER_MIGRATED)) { return toEval.isMigratedToIndividualProgramProcess(); } else { return !toEval.isMigratedToIndividualProgramProcess(); } } }); } if (getFilterPhdProcesses() != null && getFilterPhdProcesses().booleanValue()) { result.add(new InlinePredicate>( getProcesses()) { @Override public boolean eval(PhdMigrationIndividualProcessData toEval) { return getValue().contains(toEval); } }); } return result; } public Integer getPhdStudentNumber() { return phdStudentNumber; } public void setPhdStudentNumber(Integer phdStudentNumber) { this.phdStudentNumber = phdStudentNumber; } public FilterMigratedProcesses getFilterNotMigratedProcesses() { return filterNotMigratedProcesses; } public void setFilterNotMigratedProcesses(FilterMigratedProcesses filterNotMigratedProcesses) { this.filterNotMigratedProcesses = filterNotMigratedProcesses; } }