/* * @(#)SearchMissionsDTO.java * * Copyright 2011 Instituto Superior Tecnico * Founding Authors: Luis Cruz, Nuno Ochoa, Paulo Abrantes * * https://fenix-ashes.ist.utl.pt/ * * This file is part of the Expenditure Tracking Module. * * The Expenditure Tracking Module 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. * * The Expenditure Tracking Module 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 the Expenditure Tracking Module. If not, see <http://www.gnu.org/licenses/>. * */ package module.mission.presentationTier.dto; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Formatter; import java.util.List; import javax.servlet.http.HttpServletRequest; import module.mission.domain.Mission; import module.mission.domain.util.MissionState; import module.mission.domain.util.SearchMissions; import module.organization.domain.Party; import module.organization.domain.Person; import org.apache.commons.beanutils.BeanComparator; import org.apache.commons.collections.comparators.NullComparator; import org.apache.commons.collections.comparators.ReverseComparator; import org.apache.commons.lang.StringUtils; import org.joda.time.Interval; import org.joda.time.LocalDate; import pt.ist.expenditureTrackingSystem.domain.organization.AccountingUnit; import pt.ist.expenditureTrackingSystem.domain.organization.Unit; import pt.ist.fenixframework.FenixFramework; /** * * @author João Neves * @author Luis Cruz * */ public class SearchMissionsDTO extends SearchMissions { private String sortBy; private String orderBy; public SearchMissionsDTO() { super(); } public SearchMissionsDTO(final HttpServletRequest request) { setProcessNumber(StringUtils.isEmpty(request.getParameter("processNumber")) ? "" : request.getParameter("processNumber")); setMissionResponsible(StringUtils.isEmpty(request.getParameter("ruOID")) ? null : (Party) FenixFramework .getDomainObject(request.getParameter("ruOID"))); setPayingUnit(StringUtils.isEmpty(request.getParameter("puOID")) ? null : (Unit) FenixFramework.getDomainObject(request .getParameter("puOID"))); setForeign(StringUtils.isEmpty(request.getParameter("f")) ? null : Boolean.valueOf(request.getParameter("f"))); setDate(StringUtils.isEmpty(request.getParameter("d")) ? null : new LocalDate(Long.valueOf(request.getParameter("d")))); setInterval(StringUtils.isEmpty(request.getParameter("i")) ? null : new Interval(request.getParameter("i"))); setRequestingPerson(StringUtils.isEmpty(request.getParameter("rpOID")) ? null : (Person) FenixFramework .getDomainObject(request.getParameter("rpOID"))); setParticipant(StringUtils.isEmpty(request.getParameter("pOID")) ? null : (Person) FenixFramework.getDomainObject(request .getParameter("pOID"))); setPendingState(StringUtils.isEmpty(request.getParameter("ps")) ? null : MissionState.valueOf(request.getParameter("ps"))); setAccountingUnit(StringUtils.isEmpty(request.getParameter("auOID")) ? null : (AccountingUnit) FenixFramework .getDomainObject(request.getParameter("auOID"))); setParticipantAuthorizationAuthority(StringUtils.isEmpty(request.getParameter("paaOID")) ? null : (Person) FenixFramework .getDomainObject(request.getParameter("paaOID"))); setFilterCanceledProcesses(Boolean.valueOf(request.getParameter("fc"))); setFilterTakenProcesses(Boolean.valueOf(request.getParameter("ft"))); final String sortByParameter = request.getParameter("sortBy"); if (!StringUtils.isEmpty(sortByParameter) && sortByParameter.indexOf('=') != -1) { final String[] splittedSort = sortByParameter.split("="); if (splittedSort.length > 1) { this.sortBy = splittedSort[0]; this.orderBy = splittedSort[1]; } } } public List<Mission> sortedSearch() { ArrayList<Mission> results = new ArrayList<Mission>(super.search()); Collections.sort(results, getComparator()); return results; } private Comparator<Mission> getComparator() { if (!StringUtils.isEmpty(this.sortBy)) { if (this.sortBy.equals("missionProcess.processIdentification")) { return !StringUtils.isEmpty(this.orderBy) && this.orderBy.startsWith("desc") ? Mission.COMPARATOR_BY_PROCESS_IDENTIFICATION.reversed() : Mission.COMPARATOR_BY_PROCESS_IDENTIFICATION; } Comparator<Mission> comparator = new BeanComparator(this.sortBy, new NullComparator()); if (!StringUtils.isEmpty(this.orderBy) && this.orderBy.startsWith("desc")) { return new ReverseComparator(comparator); } return comparator; } return Mission.COMPARATOR_BY_PROCESS_IDENTIFICATION; } public String getRequestParameters() { return new Formatter().format( "processNumber=%s&ruOID=%s&puOID=%s&f=%s&d=%s&i=%s&rpOID=%s&pOID=%s&ps=%s&auOID=%s&paaOID=%s&fc=%s&ft=%s", getProcessNumber(), getRequestingUnitParameter(), getPayingUnitParameter(), getForeignParameter(), getDateParameter(), getIntervalParameter(), getRequestingPersonParameter(), getParticipantParameter(), getPendingStateParameter(), getAccountingUnitParameter(), getParticipantAuthorizationAuthorityParameter(), getFilterCanceledProcesses(), getFilterTakenProcesses()).toString(); } public String getRequestParametersWithSort() { return getRequestParameters() + new Formatter().format("&sortBy=%s=%s", getSortByParameter(), getOrderByParameter()).toString(); } private String getSortByParameter() { return StringUtils.isEmpty(sortBy) ? StringUtils.EMPTY : sortBy; } private String getOrderByParameter() { return StringUtils.isEmpty(orderBy) ? StringUtils.EMPTY : orderBy; } public String getRequestingUnitParameter() { return getMissionResponsible() != null ? getMissionResponsible().getExternalId() : StringUtils.EMPTY; } public String getPayingUnitParameter() { return getPayingUnit() != null ? getPayingUnit().getExternalId() : StringUtils.EMPTY; } public String getForeignParameter() { return getForeign() != null ? getForeign().toString() : StringUtils.EMPTY; } private String getAccountingUnitParameter() { return getAccountingUnit() == null ? StringUtils.EMPTY : getAccountingUnit().getExternalId(); } public String getDateParameter() { return getDate() != null ? String.valueOf(getDate().toDateTimeAtStartOfDay().getMillis()) : StringUtils.EMPTY; } public String getIntervalParameter() { return getInterval() != null ? String.valueOf(getInterval().toString()) : StringUtils.EMPTY; } public String getRequestingPersonParameter() { return getRequestingPerson() != null ? getRequestingPerson().getExternalId() : StringUtils.EMPTY; } public String getParticipantParameter() { return getParticipant() != null ? getParticipant().getExternalId() : StringUtils.EMPTY; } public String getParticipantAuthorizationAuthorityParameter() { return getParticipantAuthorizationAuthority() != null ? getParticipantAuthorizationAuthority().getExternalId() : StringUtils.EMPTY; } private String getPendingStateParameter() { final MissionState pendingState = getPendingState(); return pendingState == null ? StringUtils.EMPTY : pendingState.name(); } }