in src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java [152:298]
protected void writeSimpleTypeWithRestrictions() throws WrapperFault
{
try
{
c_writer.write("#include <axis/AxisUserAPI.hpp>\n");
c_writer.write("#include <axis/AxisUserAPIArrays.hpp>\n");
Vector restrictionData = type.getEnumerationdata();
if (restrictionData == null)
return;
TypeEntry baseEType = (TypeEntry) restrictionData.firstElement();
QName baseType = baseEType.getQName();
if (!CUtils.isSimpleType(baseType))
return;
String baseTypeName = CUtils.getSimpleType(baseType);
String langTypeName;
// User defined simple type based on another user-defined simple type
String restrictionBaseType = type.getRestrictionBaseType();
if (null != restrictionBaseType )
{
langTypeName = CUtils.sanitizeString(restrictionBaseType);
c_writer.write( "#include \"" + langTypeName + ".hpp\"\n\n");
}
else
langTypeName = baseTypeName;
c_writer.write("AXIS_CPP_NAMESPACE_USE \n\n");
c_writer.write("\n");
c_writer.write("/* ********************************************************************* */\n");
c_writer.write("/* --- Simple types and restrictions --- */\n");
c_writer.write("/* ********************************************************************* */\n");
c_writer.write("\n");
// Need to determine what to use for enumeration identifiers. That is, if a string
// enumeration value is "foobar", then we can generate an enumerator identifer of
// [type]_foobar. However, if the value is "foo bar", then we are forced to generate
// identifiers in the following format: [type]_ENUM[#], where [#] is a number starting
// at 1. We need to go through all the enumerators to determine what to do.
boolean validEnumIdentifier = true;
for (int i = 1; i < restrictionData.size(); i++)
{
QName value = (QName) restrictionData.elementAt(i);
if ("enumeration".equals(value.getLocalPart()))
validEnumIdentifier = CUtils.isValidCIdentifier(value.getNamespaceURI(), false);
if (!validEnumIdentifier)
break;
}
c_writer.write("typedef " + langTypeName + " " + c_classname + ";\n");
c_writer.write("typedef "
+ CUtils.getArrayNameForType(langTypeName) + " "
+ CUtils.getArrayNameForType(c_classname) + ";\n");
if (CUtils.isPointerType(baseTypeName)
|| "xsd__base64Binary".equals(baseTypeName)
|| "xsd__hexBinary".equals(baseTypeName))
{
c_writer.write("\n");
for (int i = 1; i < restrictionData.size(); i++)
{
QName value = (QName) restrictionData.elementAt(i);
if ("enumeration".equals(value.getLocalPart()))
{
c_writer.write("static const " + c_classname + " " + c_classname + "_");
if (validEnumIdentifier)
c_writer.write(value.getNamespaceURI());
else
c_writer.write("ENUM" + i);
c_writer.write(" = \"" + value.getNamespaceURI() + "\";\n");
}
else if ("maxLength".equals(value.getLocalPart()))
{
c_writer.write("static const int " + c_classname
+ "_MaxLength = " + value.getNamespaceURI() + ";\n");
}
else if ("minLength".equals(value.getLocalPart()))
{
c_writer.write("static const int " + c_classname
+ "_MinLength = " + value.getNamespaceURI() + ";\n");
}
}
}
else if ("int".equals(baseType.getLocalPart()))
{
if (restrictionData.size() > 1)
{
//there are enumerations or min/maxInclusive
boolean isEnum = false;
for (int i = 1; i < restrictionData.size(); i++)
{
QName value = (QName) restrictionData.elementAt(i);
if ("enumeration".equals(value.getLocalPart()))
{
isEnum = true;
if (i > 1)
c_writer.write(", ");
else
c_writer.write("typedef enum { ");
c_writer.write("ENUM" + c_classname.toUpperCase() + "_"
+ value.getNamespaceURI() + "="
+ value.getNamespaceURI());
}
else if ("minInclusive".equals(value.getLocalPart()))
{
c_writer.write("static const int " + c_classname
+ "_MinInclusive = " + value.getNamespaceURI() + ";\n");
}
else if ("maxInclusive".equals(value.getLocalPart()))
{
c_writer.write("static const int " + c_classname
+ "_MaxInclusive = " + value.getNamespaceURI() + ";\n");
}
}
if (isEnum)
c_writer.write("} " + c_classname + "_Enum;\n");
}
}
else
{
for (int i = 1; i < restrictionData.size(); i++)
{
QName value = (QName) restrictionData.elementAt(i);
if ("enumeration".equals(value.getLocalPart()))
{
c_writer.write("static const " + c_classname + " " + c_classname + "_");
if (validEnumIdentifier)
c_writer.write(value.getNamespaceURI());
else
c_writer.write("ENUM" + i);
c_writer.write(" = \"" + value.getNamespaceURI() + "\";\n");
}
}
}
}
catch (IOException e)
{
throw new WrapperFault(e);
}
}