/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. licenses this file to You 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 com.esri.gpt.server.csw.provider.components; import com.esri.gpt.framework.collection.StringSet; import com.esri.gpt.framework.util.Val; /** * Provides utilities supporting request validation. */ public class ValidationHelper { /** constructors ============================================================ */ /** Default constructor */ public ValidationHelper() {} /** methods ================================================================= */ /** * Negotiates a requested parameter value. * @param supported the supported values * @param locator the OwsException locator * @param parsed the list of parsed values * @param required <code>true</code if this parameter value is required * @return the negotiated value * @throws OwsException if validation fails */ public String negotiateValue(ISupportedValues supported, String locator, String[] parsed, boolean required) throws OwsException { if (parsed == null) { if (required) { String msg = "The parameter value was missing."; throw new OwsException(OwsException.OWSCODE_MissingParameterValue,locator,msg); } } else if (parsed.length == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { if (supported != null) { for (String value: parsed) { value = Val.chkStr(value); if (value.length() == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { String validValue = supported.getSupportedValue(value); if (validValue != null) { return validValue; } } } } String owsCode = OwsException.OWSCODE_InvalidParameterValue; String lcLocator = Val.chkStr(locator).toLowerCase(); if (lcLocator.endsWith("acceptversions") || lcLocator.endsWith("ows:version")) { owsCode = OwsException.OWSCODE_VersionNegotiationFailed; } else if (lcLocator.endsWith("acceptformats") || lcLocator.endsWith("ows:outputformat")) { // The response to a GetCapabilities request that includes an unsupported // AcceptFormats parameter value must include the default XML representation // of the capabilities document. return null; } String msg = "None of the supplied parameter values are supported."; throw new OwsException(owsCode,locator,msg); } return null; } /** * Validates a requested parameter value. * @param locator the OwsException locator * @param parsed the list of parsed values * @param required <code>true</code if this parameter value is required * @return the valid value * @throws OwsException if validation fails */ public String validateValue(String locator, String[] parsed, boolean required) throws OwsException { if (parsed == null) { if (required) { String msg = "The parameter value was missing."; throw new OwsException(OwsException.OWSCODE_MissingParameterValue,locator,msg); } } else if (parsed.length == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else if (parsed.length > 1) { String msg = "More than one parameter value was supplied."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { String value = Val.chkStr(parsed[0]); if (value.length() == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { return value; } } return null; } /** * Validates a requested parameter value. * @param supported the supported values * @param locator the OwsException locator * @param parsed the list of parsed values * @param required <code>true</code if this parameter value is required * @return the valid value * @throws OwsException if validation fails */ public String validateValue(ISupportedValues supported, String locator, String[] parsed, boolean required) throws OwsException { if (parsed == null) { if (required) { String msg = "The parameter value was missing."; throw new OwsException(OwsException.OWSCODE_MissingParameterValue,locator,msg); } } else if (parsed.length == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else if (parsed.length > 1) { String msg = "More than one parameter value was supplied."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { String value = Val.chkStr(parsed[0]); if (value.length() == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else if (supported == null) { String msg = "This parameter value is not supported: "+value; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { String validValue = supported.getSupportedValue(value); if (validValue == null) { String msg = "This parameter value is not supported: "+value; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { return validValue; } } } return null; } /** * Populates a collection of requested parameter values. * @param locator the OwsException locator * @param parsed the parsed values * @param required <code>true</code if this parameter value is required * @return the valid values * @throws OwsException if validation fails */ public StringSet validateValues(String locator, String[] parsed, boolean required) throws OwsException { StringSet requested = new StringSet(); if (parsed == null) { if (required) { String msg = "The parameter value was missing."; throw new OwsException(OwsException.OWSCODE_MissingParameterValue,locator,msg); } } else if (parsed.length == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { int count = 0; for (String value: parsed) { value = Val.chkStr(value); if (value.length() == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { requested.add(value); count++; } } if (required && (count == 0)) { String msg = "No valid values were supplied."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } } return requested; } /** * Validates a collection of requested parameter values. * @param supported the supported values * @param locator the OwsException locator * @param parsed the parsed values * @param required <code>true</code if this parameter value is required * @return the valid values * @throws OwsException if validation fails */ public StringSet validateValues(ISupportedValues supported, String locator, String[] parsed, boolean required) throws OwsException { StringSet requested = new StringSet(); if (parsed == null) { if (required) { String msg = "The parameter value was missing."; throw new OwsException(OwsException.OWSCODE_MissingParameterValue,locator,msg); } } else if (parsed.length == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { for (String value: parsed) { value = Val.chkStr(value); if (value.length() == 0) { String msg = "The parameter value was empty."; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else if (supported == null) { String msg = "This parameter value is not supported: "+value; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { String validValue = supported.getSupportedValue(value); if (validValue == null) { String msg = "This parameter value is not supported: "+value; throw new OwsException(OwsException.OWSCODE_InvalidParameterValue,locator,msg); } else { requested.add(validValue); } } } } return requested; } }