Package org.fenixedu.academic.ui.struts.action.scientificCouncil.thesis

Source Code of org.fenixedu.academic.ui.struts.action.scientificCouncil.thesis.ManageSecondCycleThesisSearchBean$ThesisPresentationStateCountMap

/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FenixEdu Academic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FenixEdu Academic.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.fenixedu.academic.ui.struts.action.scientificCouncil.thesis;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;

import org.apache.commons.lang.StringUtils;
import org.fenixedu.academic.domain.CurricularCourse;
import org.fenixedu.academic.domain.DegreeCurricularPlan;
import org.fenixedu.academic.domain.Enrolment;
import org.fenixedu.academic.domain.ExecutionDegree;
import org.fenixedu.academic.domain.ExecutionYear;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.studentCurriculum.CurriculumModule;
import org.fenixedu.academic.service.services.person.SearchPerson;
import org.fenixedu.academic.service.services.person.SearchPerson.SearchParameters;
import org.fenixedu.academic.service.services.person.SearchPerson.SearchPersonPredicate;
import org.fenixedu.academic.ui.struts.action.coordinator.thesis.ThesisPresentationState;

import pt.utl.ist.fenix.tools.util.CollectionPager;

public class ManageSecondCycleThesisSearchBean implements Serializable {

    public static class Counter implements Serializable {

        private static final long serialVersionUID = 1L;

        private int count = 1;

        public int getCount() {
            return count;
        }

    }

    public static class ThesisPresentationStateCountMap extends TreeMap<ThesisPresentationState, Counter> {

        private void count(final ThesisPresentationState thesisPresentationState) {
            if (containsKey(thesisPresentationState)) {
                get(thesisPresentationState).count++;
            } else {
                put(thesisPresentationState, new Counter());
            }
        }

    }

    private static final long serialVersionUID = 1L;

    private ExecutionYear executionYear = ExecutionYear.readCurrentExecutionYear();

    private ThesisPresentationState presentationState = ThesisPresentationState.CONFIRMED;

    private String searchString;

    private transient ThesisPresentationStateCountMap thesisPresentationStateCountMap;

    public ManageSecondCycleThesisSearchBean() {
        this(null);
    }

    public ManageSecondCycleThesisSearchBean(final ExecutionYear executionYear) {
        if (executionYear == null) {
            setExecutionYear(ExecutionYear.readCurrentExecutionYear());
        } else {
            setExecutionYear(executionYear);
        }
    }

    public ExecutionYear getExecutionYear() {
        return this.executionYear;
    }

    public void setExecutionYear(ExecutionYear executionYear) {
        this.executionYear = executionYear;
    }

    public String getSearchString() {
        return searchString;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }

    public ThesisPresentationState getPresentationState() {
        return presentationState;
    }

    public void setPresentationState(ThesisPresentationState presentationState) {
        this.presentationState = presentationState;
    }

    public ThesisPresentationStateCountMap getThesisPresentationStateCountMap() {
        return thesisPresentationStateCountMap;
    }

    public SortedSet<Person> findPersonBySearchString() {
        final SortedSet<Person> result = new TreeSet<Person>(Person.COMPARATOR_BY_NAME_AND_ID);
        if (searchString != null && !searchString.isEmpty()) {
            result.addAll(searchName(searchString));
            result.addAll(searchUsername(searchString));
            result.addAll(searchStudentNumber(searchString));
        }
        return result;
    }

    private Collection<Person> searchName(final String name) {
        final SearchParameters searchParameters = new SearchParameters();
        searchParameters.setName(name);
        return search(searchParameters);
    }

    private Collection<Person> searchUsername(final String username) {
        final SearchParameters searchParameters = new SearchParameters();
        searchParameters.setUsername(username);
        return search(searchParameters);
    }

    private Collection<Person> searchStudentNumber(final String number) {
        if (StringUtils.isNumeric(number)) {
            final SearchParameters searchParameters = new SearchParameters();
            searchParameters.setStudentNumber(new Integer(number));
            return search(searchParameters);
        }
        return Collections.emptySet();
    }

    private Collection<Person> search(final SearchParameters searchParameters) {
        final SearchPersonPredicate searchPersonPredicate = new SearchPerson.SearchPersonPredicate(searchParameters);
        SearchPerson searchPerson = new SearchPerson();
        final CollectionPager<Person> people = searchPerson.run(searchParameters, searchPersonPredicate);
        return people.getCollection();
    }

    public SortedSet<Enrolment> findEnrolments() {
        thesisPresentationStateCountMap = new ThesisPresentationStateCountMap();

        final SortedSet<Enrolment> result = new TreeSet<Enrolment>(Enrolment.COMPARATOR_BY_STUDENT_NUMBER);

        final Set<CurricularCourse> curricularCourses = new HashSet<CurricularCourse>();

        for (final ExecutionDegree executionDegree : executionYear.getExecutionDegreesSet()) {
            final DegreeCurricularPlan degreeCurricularPlan = executionDegree.getDegreeCurricularPlan();
            degreeCurricularPlan.applyToCurricularCourses(executionYear, new org.apache.commons.collections.Predicate() {
                @Override
                public boolean evaluate(final Object arg0) {
                    final CurricularCourse curricularCourse = (CurricularCourse) arg0;
                    if (curricularCourse.isDissertation()) {
                        if (!curricularCourses.contains(curricularCourse)) {
                            curricularCourses.add(curricularCourse);
                            for (final CurriculumModule curriculumModule : curricularCourse.getCurriculumModulesSet()) {
                                if (curriculumModule.isEnrolment()) {
                                    final Enrolment enrolment = (Enrolment) curriculumModule;
                                    if (enrolment.getExecutionYear() == executionYear) {
                                        final ThesisPresentationState state =
                                                ThesisPresentationState.getThesisPresentationState(enrolment);
                                        if (presentationState == null || state == presentationState) {
                                            result.add(enrolment);
                                        }
                                        thesisPresentationStateCountMap.count(state);
                                    }
                                }
                            }
                        }
                    }
                    return false;
                }
            });
        }

        return result;
    }

}
TOP

Related Classes of org.fenixedu.academic.ui.struts.action.scientificCouncil.thesis.ManageSecondCycleThesisSearchBean$ThesisPresentationStateCountMap

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.