package com.feisystems.provider.web.util;
/**
* Enumeration that provides URL parameter names and parsing logic for
* {@code com.feisystems.provider.domain.web.controller.ProviderController}.
*
* @author Jason A. Hoppes
*
*/
public enum URLArgument {
GENDER(URLHelper.GENDER, 0, 0), POSTAL_CODE(URLHelper.POSTAL_CODE, -1, 1), US_STATE(
URLHelper.US_STATE, 1, -1), CITY(URLHelper.CITY, 2, -1), SPECIALTY(
URLHelper.SPECIALTY, 3, 2), TELEPHONE(URLHelper.TELEPHONE, 4, 3), LAST_NAME(
URLHelper.LAST_NAME, 5, 4), FIRST_NAME(URLHelper.FIRST_NAME, 6, 5), ENTITY_TYPE(
URLHelper.FIRST_NAME, 7, 6), PROVIDER_ORGANIZATION_NAME(
URLHelper.PROVIDER_ORGANIZATION_NAME, 8, 7), PAGE_NUMBER(
URLHelper.PAGE_NUMBER, 9, 8), LAST_NAME_OR_ORGANIZATION_NAME(
URLHelper.LAST_NAME_OR_ORGANIZATION_NAME, 10, 9);
private final String argumentName;
private final int postalCodeArrayIdx;
private final int cityStateArrayIdx;
URLArgument(String argumentName, int cityStateArrayIdx,
int postalCodeArrayIdx) {
this.argumentName = argumentName;
this.postalCodeArrayIdx = postalCodeArrayIdx;
this.cityStateArrayIdx = cityStateArrayIdx;
}
public String argumentName() {
return argumentName;
}
public static class URLHelper {
public static final String POSTAL_CODE_METHOD_TYPE = "zipcode";
public static final String CITY_STATE_METHOD_TYPE = "cityState";
public static final String GENDER = "gender";
public static final String ENTITY_TYPE = "entitytype";
public static final String POSTAL_CODE = "zipcode";
public static final String US_STATE = "usstate";
public static final String CITY = "city";
public static final String SPECIALTY = "specialty";
public static final String TELEPHONE = "phone";
public static final String LAST_NAME = "lastname";
public static final String FIRST_NAME = "firstname";
public static final String PROVIDER_ORGANIZATION_NAME = "facilityname";
public static final String LAST_NAME_OR_ORGANIZATION_NAME = "lastnameOrFacilityName";
public static final String PAGE_NUMBER = "pageNumber";
public static final String SEARCH_STRING = "%";
}
public static URLArgument getURLArgumentInstance(String name) {
if (name.equals(URLHelper.POSTAL_CODE)) {
return POSTAL_CODE;
} else if (name.equals(URLHelper.US_STATE)) {
return US_STATE;
} else if (name.equals(URLHelper.CITY)) {
return CITY;
} else if (name.equals(URLHelper.SPECIALTY)) {
return SPECIALTY;
} else if (name.equals(URLHelper.GENDER)) {
return GENDER;
} else if (name.equals(URLHelper.TELEPHONE)) {
return TELEPHONE;
} else if (name.equals(URLHelper.LAST_NAME)) {
return LAST_NAME;
} else if (name.equals(URLHelper.FIRST_NAME)) {
return FIRST_NAME;
} else if (name.equals(URLHelper.PROVIDER_ORGANIZATION_NAME)) {
return PROVIDER_ORGANIZATION_NAME;
} else if (name.equals(URLHelper.LAST_NAME_OR_ORGANIZATION_NAME)) {
return LAST_NAME_OR_ORGANIZATION_NAME;
} else if (name.equals(URLHelper.ENTITY_TYPE)) {
return ENTITY_TYPE;
} else if (name.equals(URLHelper.PAGE_NUMBER)) {
return PAGE_NUMBER;
}
throw new IllegalArgumentException("URL paramter type '" + name
+ "' not found.");
}
public static String getMethodType(String url) {
if (url.indexOf(URLHelper.US_STATE) >= 0) {
return URLHelper.CITY_STATE_METHOD_TYPE;
}
return URLHelper.POSTAL_CODE_METHOD_TYPE;
}
public static boolean isLastNameAndFacilityNameTogether(String url) {
return url.indexOf(URLHelper.LAST_NAME_OR_ORGANIZATION_NAME) >= 0;
}
public static String[] createArgumentArray(String methodType) {
if (methodType.equals(URLHelper.POSTAL_CODE_METHOD_TYPE)) {
return new String[] { URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING };
} else if (methodType.equals(URLHelper.CITY_STATE_METHOD_TYPE)) {
return new String[] { URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING, URLHelper.SEARCH_STRING,
URLHelper.SEARCH_STRING };
}
throw new IllegalArgumentException("Method type '" + methodType
+ "' not found.");
}
public void fillArgument(String[] args, String methodType, String value) {
if (URLHelper.CITY_STATE_METHOD_TYPE.equals(methodType)) {
args[cityStateArrayIdx] = value;
return;
}
args[postalCodeArrayIdx] = value;
}
}