net.navasoft.madcoin.backend.services.WorkRequestQueryFilter.java Source code

Java tutorial

Introduction

Here is the source code for net.navasoft.madcoin.backend.services.WorkRequestQueryFilter.java

Source

/*******************************************************************************
 * Copyright 2014 Juan Diego Navarre Gonzalez
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package net.navasoft.madcoin.backend.services;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import net.navasoft.madcoin.backend.services.vo.WorkRequestQueryVO;

import org.apache.commons.lang.ArrayUtils;

/**
 * net.navasoft.madcoin.backend.services Class class WorkRequestQueryFilter.
 * Description:
 * 
 * @author Juan Diego Navarre Gonzalez - (<a
 *         href="mailto:jdnavarreg@outlook.com">{@literal jdnavarreg@outlook.com}
 *         </a>)
 * @version 1.0
 * @since 27/07/2014 06:48:16 PM
 */
public class WorkRequestQueryFilter implements IFilterSelector<WorkRequestQueryVO> {

    /**
     * mandatory.
     * 
     * @since 27/07/2014, 06:48:16 PM
     */
    private final String[] mandatory = { "Username", "CostInterval", "SpecificCost", "Status", "SpecificDate",
            "DateInterval", "IdOrder" };

    /**
     * optional correlation.
     * 
     * @since 27/07/2014, 06:48:16 PM
     */
    private static Map<String, EFilters> optionalCorrelation = new HashMap<String, EFilters>();

    /**
     * Instantiates a new work request query filter.
     * 
     * @since 27/07/2014, 06:48:16 PM
     */
    public WorkRequestQueryFilter() {
        optionalCorrelation.put("Currency", EFilters.COSTINTERVAL_FILTER);
        optionalCorrelation.put("TimeZone", EFilters.DATEINTERVAL_FILTER);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.navasoft.madcoin.backend.services.IFilterSelector#chooseFilter(java
     * .lang.Object)
     */
    /**
     * Choose filter.
     * 
     * @param entryVO
     *            the entry vo
     * @return the generic filter
     * @since 27/07/2014, 06:48:16 PM
     */
    @Override
    public GenericFilter<WorkRequestQueryVO> chooseFilter(WorkRequestQueryVO entryVO) {
        GenericFilter<WorkRequestQueryVO> selector = null;
        Method[] accessors = WorkRequestQueryVO.class.getMethods();
        try {
            accessors = (Method[]) ArrayUtils.removeElement(accessors,
                    WorkRequestQueryVO.class.getMethod("getClass", ArrayUtils.EMPTY_CLASS_ARRAY));
        } catch (NoSuchMethodException e1) {
            e1.printStackTrace();
        } catch (SecurityException e1) {
            e1.printStackTrace();
        }
        try {
            if (entryVO != null) {
                for (Method beanGetters : accessors) {
                    if (beanGetters.getName().startsWith("get")) {
                        Object fieldValue;
                        fieldValue = beanGetters.invoke(entryVO, ArrayUtils.EMPTY_OBJECT_ARRAY);
                        if (fieldValue != null) {
                            String fieldToFilter = beanGetters.getName().replace("get", "");
                            EFilters guessedFilters = null;
                            if (ArrayUtils.contains(mandatory, fieldToFilter)) {
                                guessedFilters = EFilters.valueOf(fieldToFilter.toUpperCase() + "_FILTER");
                            } else {
                                if (guessedFilters == null) {
                                    guessedFilters = optionalCorrelation.get(fieldToFilter);
                                }
                            }
                            selector = (GenericFilter<WorkRequestQueryVO>) Class
                                    .forName(guessedFilters.getImplementingClass()).getConstructor(EFilters.class)
                                    .newInstance(guessedFilters);
                        }
                    }
                }
                if (selector == null) {
                    selector = WorkRequestNoFilter.class.newInstance();
                } else {
                    selector.setScope(entryVO);
                }
                return selector;
            } else {
                selector = WorkRequestNoFilter.class.newInstance();
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return selector;
    }
}