blob: 203e1d24b065fba8bb154303e832bf4713931306 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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 org.apache.axis2.wsdl.databinding;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.namespace.Constants;
import org.apache.axis2.util.JavaUtils;
import org.apache.axis2.wsdl.i18n.CodegenMessages;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class TypeMappingAdapter implements TypeMapper {
/**
* Default class name is the OMElement or the default case However the extensions can override
* the default class to suit the databinding framework!
*/
protected String defaultClassName = OMElement.class.getName();
protected static final String XSD_SCHEMA_URL = Constants.URI_2001_SCHEMA_XSD;
//hashmap that contains the type mapping names
protected HashMap qName2NameMap = new HashMap();
//hashmap that contains the type mapping objects
protected HashMap qName2ObjectMap = new HashMap();
//hashmap for keeping the status objects.
protected HashMap qName2StatusMap = new HashMap();
//counter variable to generate unique parameter ID's
protected int counter = 0;
// this is to keep generated parameter names
protected List parameterNameList = new ArrayList();
protected boolean isObject = false;
//Upper limit for the paramete count
protected static final int UPPER_PARAM_LIMIT = 1000;
private static final String PARAMETER_NAME_SUFFIX = "param";
/**
* Gets the type mapping name. If type mapping is not found, returns default.
*
* @see TypeMapper#getTypeMappingName(javax.xml.namespace.QName)
*/
public String getTypeMappingName(QName qname) {
if ((qname != null)) {
Object o = qName2NameMap.get(qname);
if (o != null) {
return (String)o;
} else if (Constants.XSD_ANYTYPE.equals(qname) ||
Constants.XSD_ANY.equals(qname)) {
return defaultClassName;
} else if (Constants.XSD_STRING.equals(qname)) {
return String.class.getName();
} else {
throw new UnmatchedTypeException(
CodegenMessages.getMessage("databinding.typemapper.typeunmatched",
qname.getLocalPart(),
qname.getNamespaceURI())
);
}
} else {
return null;
}
}
/** @see TypeMapper#getParameterName(javax.xml.namespace.QName) */
public String getParameterName(QName qname) {
if (counter == UPPER_PARAM_LIMIT) {
counter = 0;
}
if ((qname != null) && (qname.getLocalPart().length() != 0)) {
String paramName = JavaUtils.xmlNameToJavaIdentifier(qname.getLocalPart());
if (parameterNameList.contains(paramName)) {
paramName = paramName + counter++;
}
parameterNameList.add(paramName);
return paramName;
} else {
return PARAMETER_NAME_SUFFIX + counter++;
}
}
/** @see TypeMapper#addTypeMappingName(javax.xml.namespace.QName,String) */
public void addTypeMappingName(QName qname, String value) {
qName2NameMap.put(qname, value);
}
/**
* @param qname
* @return Returns object representing a specific form of the XSD compilation.
* @see TypeMapper#getTypeMappingObject(javax.xml.namespace.QName)
*/
public Object getTypeMappingObject(QName qname) {
return qName2ObjectMap.get(qname);
}
/**
* return the class name for this QName
* @param qname
* @return return class names
*/
public Object getQNameToMappingObject(QName qname){
return qName2NameMap.get(qname);
}
/**
* @param qname
* @param value
* @see TypeMapper#addTypeMappingObject(javax.xml.namespace.QName, Object)
*/
public void addTypeMappingObject(QName qname, Object value) {
isObject = true;
qName2ObjectMap.put(qname, value);
}
/**
* @return Returns boolean.
* @see TypeMapper#isObjectMappingPresent()
*/
public boolean isObjectMappingPresent() {
return isObject;
}
/** @see TypeMapper#getAllMappedNames() */
public Map getAllMappedNames() {
return qName2NameMap;
}
/** @see TypeMapper#getAllMappedObjects() */
public Map getAllMappedObjects() {
return qName2ObjectMap;
}
/** @see TypeMapper#getDefaultMappingName() */
public String getDefaultMappingName() {
return defaultClassName;
}
/**
* @param defaultMapping
* @see TypeMapper#setDefaultMappingName(String)
*/
public void setDefaultMappingName(String defaultMapping) {
this.defaultClassName = defaultMapping;
}
/**
* @param qName
* @param status
* @see TypeMapper#addTypeMappingStatus(javax.xml.namespace.QName, Object)
*/
public void addTypeMappingStatus(QName qName, Object status) {
this.qName2StatusMap.put(qName, status);
}
/**
* @param qName
* @see TypeMapper#getTypeMappingStatus(javax.xml.namespace.QName)
*/
public Object getTypeMappingStatus(QName qName) {
return this.qName2StatusMap.get(qName);
}
}