8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: ActionSchema.java,v 1.3 2008/06/25 05:43:43 qcheng Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.policy;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.*;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport org.w3c.dom.*;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.sm.*;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.shared.xml.XMLUtils;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.ums.validation.*;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The class <code>ActionSchema</code> provides interfaces to
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * obtain meta information about service action values.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * For example, information about the syntax of the action values,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * defaults values, choice values, etc.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic class ActionSchema extends AttributeSchemaImpl {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ACTION_SCHEMA = "AttributeSchema";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String ACTION_VALUE = "AttributeValue";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String VALUE = "Value";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String I18N_KEY = "i18nKey";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected static final String RESOURCE_NAME = "ResourceName";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private Node actionNode = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Constructor with the action schema node
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param node <code>Node</code> representing w3c DOM representation
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster of the object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster protected ActionSchema(Node node) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster super(node);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster actionNode = node;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns a <code>Set</code> of possible action values if the action
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * schema is of choice type ie <code>SINGLE_CHOICE</code> or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>MULTIPLE_CHOICE</code> in the service schema definition.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The choice values are sorted alphabetically in the ascending order.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If the action values are not of choice type, this method return an
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * empty <code>Set</code> and not <code>null</code>.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return choice values for action values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Set getActionValues() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return(getChoiceValuesSet());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the I18N key for the action value. This method can
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * be used only when the action schema is of type <code>SINGLE_CHOICE</code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * or <code>MULTIPLE_CHOICE</code>. Also each action value must have
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * defined its <code>i18nKey</code> in the XML.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return i18n key for the action value if present in the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * service XML; <code>null</code> otherwise
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getActionValueI18NKey(String actionValue) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return(getChoiceValueI18NKey(actionValue));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns <code>true</code> if the action requires a resource name.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * An action can have a resource name only if its type is either
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>SINGLE_CHOICE</code> or <code>MULTIPLE_CHOICE</code>, or if
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * its <code>syntax</code> is boolean.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return <code>true</code> if the action name requires a resource name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>false</code> otherwise
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean requiresResourceName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return(isResourceNameAllowed());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the default resource names associated with the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * action value. If it is not configured, it returns an
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * empty <code>Set</code>.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return default resource names associated with the action value
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Set getResourceNames(String actionValue) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the child nodes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList children = actionNode.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < children.getLength(); i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node node = children.item(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Obtain the action value nodes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (node.getNodeName().equalsIgnoreCase(ACTION_VALUE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList nl = node.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int j = 0; j < nl.getLength(); j++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node n = nl.item(j);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check for Value node
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (n.getNodeName().equalsIgnoreCase(VALUE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = XMLUtils.getValueOfValueNode(n);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if it matchs actionValue
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (actionValue.equalsIgnoreCase(value.toString())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the resource names from ActionValue node
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster HashSet answer = new HashSet();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList rl = node.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int k = 0; k < rl.getLength(); k++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node r = rl.item(k);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (r.getNodeName().equalsIgnoreCase(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster RESOURCE_NAME)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer.add(XMLUtils.getValueOfValueNode(r));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (Collections.EMPTY_SET);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the I18N key for displaying resource names associated
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the action value. If it is not configured, it returns
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>null</code>.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return String representing <code>i18nKey</code> for displaying
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * resource names.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String getResourceNameI18NKey(String actionValue) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the child nodes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList children = actionNode.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int numNodes = children.getLength();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int i = 0; i < numNodes; i++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node node = children.item(i);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Obtain the action value nodes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (node.getNodeName().equalsIgnoreCase(ACTION_VALUE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList nl = node.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int numOfNodeList = nl.getLength();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int j = 0; j < numOfNodeList; j++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node n = nl.item(j);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check for Value node
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (n.getNodeName().equalsIgnoreCase(VALUE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String value = XMLUtils.getValueOfValueNode(n);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if it matchs actionValue
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (actionValue.equalsIgnoreCase(value)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the resource names from ActionValue node
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster NodeList rl = node.getChildNodes();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int rlLength = rl.getLength();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (int k = 0; k < rlLength; k++) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Node r = rl.item(k);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (r.getNodeName().equalsIgnoreCase(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster RESOURCE_NAME)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the i18n key attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String i18nKey =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster XMLUtils.getNodeAttributeValue(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster r, I18N_KEY);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (i18nKey != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (i18nKey);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Validates the values against the action schema
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static void validate(ActionSchema as, Set values)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws InvalidNameException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!validateType(as, values) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster !validateSyntax(as, values)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // throw an exception
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PolicyManager.debug.error(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "In validate action name: invalid values");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw (new InvalidNameException(ResBundleUtils.rbName,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "invalid_action_value", null, as.getName(),
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster PolicyException.POLICY));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Checks the validity of action values against the action 's
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * type as defined in the action schema.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static boolean validateType(ActionSchema as, Set values) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((values == null) || values.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // It is OK to have no values set for an action
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (true);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the type
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AttributeSchema.Type type = as.getType();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean checkType = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check for single values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (type.equals(AttributeSchema.Type.SINGLE) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster type.equals(AttributeSchema.Type.SINGLE_CHOICE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster checkType = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (values.size() > 1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check for choice values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (type.equals(AttributeSchema.Type.SINGLE_CHOICE) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster type.equals(AttributeSchema.Type.MULTIPLE_CHOICE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster checkType = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get possible choice values and check them
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Set validValues = as.getActionValues();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator givenValues = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (givenValues.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!validValues.contains(givenValues.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check the type, other types SINGLE & CHOICE have been checked
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!checkType && !type.equals(AttributeSchema.Type.LIST)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (false);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (true);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Checks the validity of action values against the action 's
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * syntax as defined in the action schema.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static boolean validateSyntax(ActionSchema as, Set values) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster AttributeSchema.Syntax syntax = as.getSyntax();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check for String syntax
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.STRING) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster syntax.equals(AttributeSchema.Syntax.PASSWORD)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Anything is allowed
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.BOOLEAN)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (values.size() == 1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String test = (String) it.next();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ( as.getTrueValue().equals(test) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster as.getFalseValue().equals(test) ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.EMAIL)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!mailValidator.validate((String) it.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.URL)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!urlValidator.validate((String) it.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.NUMERIC) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster syntax.equals(AttributeSchema.Syntax.NUMBER)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!numberValidator.validate((String) it.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.PERCENT) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster syntax.equals(AttributeSchema.Syntax.DECIMAL_NUMBER)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!floatValidator.validate((String) it.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.NUMBER_RANGE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String s = (String) it.next();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Integer i = Integer.valueOf(s);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Integer start = Integer.valueOf(as.getStartRange());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Integer end = Integer.valueOf(as.getEndRange());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((i == null) || (start == null) || (end == null)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!(i.intValue() >= start.intValue()) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster !(i.intValue() <= end.intValue())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (syntax.equals(AttributeSchema.Syntax.DN)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = values.iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = true;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!dnValidator.validate((String) it.next())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster break;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Validators from UMS service
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final MailAddressValidator mailValidator =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new MailAddressValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final BooleanValidator boolValidator = new BooleanValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final NumberValidator numberValidator = new NumberValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final URLValidator urlValidator = new URLValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final FloatValidator floatValidator = new FloatValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static final DNValidator dnValidator = new DNValidator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}