/* * Copyright 2006 Google Inc. * * 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 com.google.gwt.dev.util.xml; import com.google.gwt.core.ext.UnableToCompleteException; /** * A set of args for a given set of parameters, some of which may be set to * default values. */ public class HandlerArgs { // The real (non-normalized) names of the attributes, used to report errors. private final String[] attrNames; private final String[] argValues; private final HandlerParam[] handlerParams; private final int lineNumber; private final Schema schema; private final String elemName; public HandlerArgs(Schema schema, int lineNumber, String elemName, HandlerParam[] handlerParams) { this.schema = schema; this.lineNumber = lineNumber; this.elemName = elemName; this.handlerParams = handlerParams; attrNames = new String[handlerParams.length]; argValues = new String[handlerParams.length]; // Set default values. // for (int i = 0, n = handlerParams.length; i < n; ++i) { argValues[i] = this.handlerParams[i].getDefaultValue(schema); } } /** * @return the argument converted to a form that is expected to compatible * with the associated parameter and will work for a reflection * "invoke()" call */ public Object convertToArg(int i) throws UnableToCompleteException { String value = argValues[i]; if (value != null) { AttributeConverter converter = schema.getAttributeConverter(handlerParams[i].getParamType()); return converter.convertToArg(schema, lineNumber, elemName, attrNames[i], value); } else if (handlerParams[i].isOptional()) { return null; } else { return new NullPointerException("Argument " + i + " was null"); } } public int getArgCount() { return handlerParams.length; } public String getArgName(int i) { return handlerParams[i].getNormalizedName(); } public boolean isArgSet(int i) { if (argValues[i] != null || handlerParams[i].isOptional()) { return true; } else { return false; } } /** * @return <code>true</code> if the param for the specified attribute was * set; <code>false</code> if no matching param was found */ public boolean setArg(String attrName, String attrValue) { String normalizedAttrName = normalizeAttrName(attrName); for (int i = 0, n = handlerParams.length; i < n; ++i) { Object testParamName = handlerParams[i].getNormalizedName(); if (testParamName.equals(normalizedAttrName)) { // Set it, but don't convert it yet. attrNames[i] = attrName; argValues[i] = attrValue; return true; } } return false; } private String normalizeAttrName(String attrName) { // NOTE: this is where other characters would be folded to '_'. return attrName.replace('-', '_'); } }