Java tutorial
/******************************************************************************* * 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; } }