com.sfs.whichdoctor.search.http.OrganisationInputHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.sfs.whichdoctor.search.http.OrganisationInputHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2009 David Harrison.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl-3.0.html
 *
 * Contributors:
 *     David Harrison - initial API and implementation
 ******************************************************************************/
package com.sfs.whichdoctor.search.http;

import com.sfs.DataFilter;
import com.sfs.beans.UserBean;
import com.sfs.whichdoctor.beans.AddressBean;
import com.sfs.whichdoctor.beans.EmailBean;
import com.sfs.whichdoctor.beans.FinancialSummaryBean;
import com.sfs.whichdoctor.beans.OrganisationBean;
import com.sfs.whichdoctor.beans.SearchBean;
import com.sfs.whichdoctor.beans.SpecialtyBean;
import com.sfs.whichdoctor.search.sql.OrganisationSqlHandler;

import java.util.ArrayList;
import java.util.Collection;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

/**
 * The Class OrganisationInputHandler.
 *
 * @author David Harrison
 */
public class OrganisationInputHandler extends InputHandlerBase {

    /** The organisation sql handler. */
    @Resource
    private OrganisationSqlHandler organisationSqlHandler;

    /**
     * Process the incoming HttpRequest for search parameters.
     *
     * @param request the request
     * @param user the user
     *
     * @return the search bean
     */
    public final SearchBean process(final HttpServletRequest request, final UserBean user) {

        SearchBean search = organisationSqlHandler.initiate(user);

        OrganisationBean searchCriteria = (OrganisationBean) search.getSearchCriteria();
        OrganisationBean searchConstraints = (OrganisationBean) search.getSearchConstraints();

        /* Process search form */
        String strGUIDList = DataFilter.getHtml(request.getParameter("guidList"));
        String strIncludeGUIDList = DataFilter.getHtml(request.getParameter("includeGUIDList"));

        String strName = DataFilter.getHtml(request.getParameter("name"));
        String strType = DataFilter.getHtml(request.getParameter("type"));
        String strTrainingOrganisation = DataFilter.getHtml(request.getParameter("trainingOrganisation"));
        String strTrainingProgram = DataFilter.getHtml(request.getParameter("trainingProgram"));
        String strSpecialtyStatus = DataFilter.getHtml(request.getParameter("specialtyStatus"));
        String strRegion = DataFilter.getHtml(request.getParameter("region"));
        String strAddressClass = DataFilter.getHtml(request.getParameter("addressClass"));
        String strAddressType = DataFilter.getHtml(request.getParameter("addressType"));
        String strAddressReturnedMail = DataFilter.getHtml(request.getParameter("addressReturnedMail"));
        String strAddressRequestNoMail = DataFilter.getHtml(request.getParameter("addressRequestNoMail"));
        String strCountry = DataFilter.getHtml(request.getParameter("country"));
        String strCity = DataFilter.getHtml(request.getParameter("city"));
        String strEmailType = DataFilter.getHtml(request.getParameter("emailType"));
        String strEmailReturnedMail = DataFilter.getHtml(request.getParameter("emailReturnedMail"));
        String strEmailRequestNoMail = DataFilter.getHtml(request.getParameter("emailRequestNoMail"));

        String strClosingBalanceA = DataFilter.getHtml(request.getParameter("closingBalanceA"));
        String strClosingBalanceB = DataFilter.getHtml(request.getParameter("closingBalanceB"));

        String strCreatedA = DataFilter.getHtml(request.getParameter("createdA"));
        String strCreatedB = DataFilter.getHtml(request.getParameter("createdB"));
        String strUpdatedA = DataFilter.getHtml(request.getParameter("updatedA"));
        String strUpdatedB = DataFilter.getHtml(request.getParameter("updatedB"));

        if (StringUtils.isNotBlank(strGUIDList)) {
            // Parse the GUID list string into a collection of strings
            searchCriteria.setGUIDList(DataFilter.parseTextDataToCollection(strGUIDList));
        }

        if (StringUtils.isNotBlank(strIncludeGUIDList)) {
            // Parse the GUID list string into a collection of strings
            searchCriteria.setIncludeGUIDList(DataFilter.parseTextDataToCollection(strIncludeGUIDList));
        }

        /* Set first and last name requirements */
        if (StringUtils.isNotBlank(strName)) {
            searchCriteria.setName(strName.trim());
        }

        /* Set type requirements */
        if (StringUtils.isNotBlank(strType) && !StringUtils.equals(strType, "Null")) {
            searchCriteria.setType(strType.trim());
        }

        /* Tag searches */
        searchCriteria.setTags(this.setTagArray(request, user));

        /* Check if specialtyAge or Type was set */
        boolean specialty = false;
        SpecialtyBean specialtyCriteria = new SpecialtyBean();

        if (StringUtils.isNotBlank(strTrainingOrganisation)
                && !StringUtils.equals(strTrainingOrganisation, "Null")) {
            specialtyCriteria.setTrainingOrganisation(strTrainingOrganisation);
            specialty = true;
        }
        if (StringUtils.isNotBlank(strTrainingProgram) && !StringUtils.equals(strTrainingProgram, "Null")) {
            specialtyCriteria.setTrainingProgram(strTrainingProgram);
            specialty = true;
        }
        if (StringUtils.isNotBlank(strSpecialtyStatus) && !StringUtils.equals(strSpecialtyStatus, "Null")) {
            specialtyCriteria.setStatus(strSpecialtyStatus);
            specialty = true;
        }
        if (specialty) {
            Collection<SpecialtyBean> specialties = new ArrayList<SpecialtyBean>();
            specialties.add(specialtyCriteria);
            searchCriteria.setSpecialtyList(specialties);
        }
        /* Set organisation region */
        if (StringUtils.isNotBlank(strRegion) && !StringUtils.equals(strRegion, "Null")) {
            searchCriteria.setRegion(strRegion);
        }

        // Check if Address details have been submitted
        boolean address = false;
        AddressBean addressCriteria = new AddressBean();
        AddressBean addressConstraints = new AddressBean();
        // Address defaults
        addressCriteria.setReturnedMail(false);
        addressConstraints.setReturnedMail(true);
        addressCriteria.setRequestNoMail(false);
        addressConstraints.setRequestNoMail(true);

        // Set the address class and type - but don't set the address flag yet
        if (StringUtils.isNotBlank(strAddressClass)) {
            if (StringUtils.equalsIgnoreCase(strAddressClass, "Preferred")) {
                // Set the primary flag to true
                addressCriteria.setPrimary(true);
                addressConstraints.setPrimary(true);
            } else {
                // Set the address class
                addressCriteria.setContactClass(strAddressClass);
            }
        }
        if (StringUtils.isNotBlank(strAddressType)) {
            // Set the address type
            addressCriteria.setContactType(strAddressType);
        }

        // Set the address city
        if (StringUtils.isNotBlank(strCity)) {
            addressCriteria.setAddressField(strCity);
            address = true;
        }
        // Set the address country
        if (StringUtils.isNotBlank(strCountry)) {
            addressCriteria.setCountry(strCountry);
            address = true;
        }
        // Set the returned mail
        if (StringUtils.equals(strAddressReturnedMail, "true")) {
            addressCriteria.setReturnedMail(true);
            addressConstraints.setReturnedMail(true);
            address = true;
        }
        if (StringUtils.equals(strAddressReturnedMail, "false")) {
            addressCriteria.setReturnedMail(false);
            addressConstraints.setReturnedMail(false);
            address = true;
        }
        // Set the request mail
        if (StringUtils.equals(strAddressRequestNoMail, "true")) {
            addressCriteria.setRequestNoMail(true);
            addressConstraints.setRequestNoMail(true);
            address = true;
        }
        if (StringUtils.equals(strAddressRequestNoMail, "false")) {
            addressCriteria.setRequestNoMail(false);
            addressConstraints.setRequestNoMail(false);
            address = true;
        }

        if (address) {
            Collection<AddressBean> addresses = new ArrayList<AddressBean>();
            Collection<AddressBean> addresses2 = new ArrayList<AddressBean>();
            addresses.add(addressCriteria);
            addresses2.add(addressConstraints);
            searchCriteria.setAddress(addresses);
            searchConstraints.setAddress(addresses2);
        }

        // Check if Email details have been submitted
        boolean email = false;
        EmailBean emailCriteria = new EmailBean();
        EmailBean emailConstraints = new EmailBean();

        // Email defaults
        emailCriteria.setReturnedMail(true);
        emailConstraints.setReturnedMail(false);
        emailCriteria.setRequestNoMail(true);
        emailConstraints.setRequestNoMail(false);
        emailCriteria.setEmailQuestions(true);
        emailConstraints.setEmailQuestions(false);

        // Set the email type - but don't set the address flag yet
        if (StringUtils.isNotBlank(strEmailType)) {
            if (StringUtils.equalsIgnoreCase(strEmailType, "Preferred")) {
                // Set the primary flag to true
                emailCriteria.setPrimary(true);
                emailConstraints.setPrimary(true);
            } else {
                // Set the email type
                emailCriteria.setContactType(strEmailType);
            }
        }

        if (StringUtils.equals(strEmailReturnedMail, "true")) {
            emailCriteria.setReturnedMail(true);
            emailConstraints.setReturnedMail(true);
            email = true;
        }
        if (StringUtils.equals(strEmailReturnedMail, "false")) {
            emailCriteria.setReturnedMail(false);
            emailConstraints.setReturnedMail(false);
            email = true;
        }
        if (StringUtils.equals(strEmailRequestNoMail, "true")) {
            emailCriteria.setRequestNoMail(true);
            emailConstraints.setRequestNoMail(true);
            email = true;
        }
        if (StringUtils.equals(strEmailRequestNoMail, "false")) {
            emailCriteria.setRequestNoMail(false);
            emailConstraints.setRequestNoMail(false);
            email = true;
        }

        if (email) {
            Collection<EmailBean> emails = new ArrayList<EmailBean>();
            Collection<EmailBean> emails2 = new ArrayList<EmailBean>();
            emails.add(emailCriteria);
            emails2.add(emailConstraints);
            searchCriteria.setEmail(emails);
            searchConstraints.setEmail(emails2);
        }

        if (StringUtils.isNotBlank(strClosingBalanceA) && !StringUtils.equals(strClosingBalanceA, "Null")) {

            // Something has been defined for this field
            double closingBalanceA = 0;
            double closingBalanceB = 0;

            try {
                closingBalanceA = Double.parseDouble(strClosingBalanceA);
            } catch (NumberFormatException nfe) {
                closingBalanceA = 0;
            }
            try {
                closingBalanceB = Double.parseDouble(strClosingBalanceB);
            } catch (NumberFormatException nfe) {
                closingBalanceB = 0;
            }

            if (StringUtils.equals(strClosingBalanceB, "-")) {
                closingBalanceB = -100000000;
            }
            if (StringUtils.equals(strClosingBalanceB, "+")) {
                closingBalanceB = 100000000;
            }

            FinancialSummaryBean financialSummaryCriteria = new FinancialSummaryBean();
            // This is a unique id to indicate the financial summary has been set
            financialSummaryCriteria.setId(1);
            financialSummaryCriteria.setClosingBalance(closingBalanceA);
            searchCriteria.setFinancialSummary(financialSummaryCriteria);

            if (closingBalanceB != 0) {
                FinancialSummaryBean financialSummaryConstraints = new FinancialSummaryBean();
                financialSummaryConstraints.setClosingBalance(closingBalanceB);
                searchConstraints.setFinancialSummary(financialSummaryConstraints);
            }
        }

        if (StringUtils.isNotBlank(strCreatedA)) {
            searchCriteria.setCreatedDate(DataFilter.parseDate(strCreatedA, false));
        }
        if (StringUtils.isNotBlank(strCreatedB)) {
            searchConstraints.setCreatedDate(DataFilter.parseDate(strCreatedB, false));

            if (StringUtils.equals(strCreatedB, "+")) {
                /* All dates above Date A requested */
                searchConstraints.setCreatedDate(getMaximumDate());
            }
            if (StringUtils.equals(strCreatedB, "-")) {
                /* Add dates below Date A requested */
                searchConstraints.setCreatedDate(getMinimumDate());
            }
        }
        if (StringUtils.isNotBlank(strUpdatedA)) {
            searchCriteria.setModifiedDate(DataFilter.parseDate(strUpdatedA, false));
        }
        if (StringUtils.isNotBlank(strUpdatedB)) {

            searchConstraints.setModifiedDate(DataFilter.parseDate(strUpdatedB, false));

            if (StringUtils.equals(strUpdatedB, "+")) {
                /* All dates above Date A requested */
                searchConstraints.setModifiedDate(getMaximumDate());
            }
            if (StringUtils.equals(strUpdatedB, "-")) {
                /* Add dates below Date A requested */
                searchConstraints.setModifiedDate(getMinimumDate());
            }
        }
        search.setSearchCriteria(searchCriteria);
        search.setSearchConstraints(searchConstraints);

        return search;
    }

    /**
     * Return a standard search bean.
     *
     * @param user the user
     *
     * @return the search bean
     */
    public final SearchBean process(final UserBean user) {

        SearchBean search = organisationSqlHandler.initiate(user);

        OrganisationBean searchCriteria = (OrganisationBean) search.getSearchCriteria();

        search.setSearchCriteria(searchCriteria);

        return search;
    }
}