Map<String, ClassDefinition> structs = new Hashtable<String, ClassDefinition>();
for (String key : type.possibleEntries.keySet())
{
ITypeNode t = type.possibleEntries.get(key);
if ((t instanceof ListType
&& ((ListType) t).type instanceof MapType || t instanceof MapType))
{
ClassDefinition pClass = new ClassDefinition();
pClass.setName(m.name + key + "StructParam");
pClass.packageName = structPackageName;
pClass.imports.add(new Type(Map.class));
pClass.imports.add(new Type(List.class));
pClass.implemented.add(stryctInterface);
defs.add(pClass);
structs.put(key, pClass);
MapType mType = null;
if (t instanceof ListType)
{
mType = (MapType) ((ListType) t).type;
} else
{
mType = (MapType) t;
}
defs.addAll(generateStructs(pClass, structPackageName, mType));
if (t instanceof ListType)
{
sb.append("List<" + pClass.getName() + ">");
} else
{
sb.append(pClass.getName());
}
} else
{
sb.append(type.possibleEntries.get(key).toSource());
}
sb.append(" ");
sb.append(key);
sb.append(",");
}
if (type.possibleEntries.size() > 0)
{
sb.deleteCharAt(sb.length() - 1);
}
sb.append(")");
if (!m.throwsTypes.isEmpty())
{
sb.append(m.getThrowsSourceSegment());
}
sb.append("\n\t{");
sb.append("\n\t\t" + p1.type.toSource() + " data = new "
+ p1.type.toSource().replaceFirst("Map", "Hashtable") + "();");
Integer pCount = 0;
for (String key : type.possibleEntries.keySet())
{
if (structs.containsKey(key))
{
ITypeNode t = ((MapType) p1.type).valueType;
if (t.getName().contains(Object.class.getSimpleName()))
{
t = new ListType(new Type(Object.class));
}
MapType mapt = ((MapType) p1.type);
if (mapt.valueType instanceof ListType)
{
sb.append("\n\n\t\tList<"
+ ((ListType) mapt.valueType).type.toSource()
+ "> pTmp"
+ pCount
+ (" = new List<"
+ ((ListType) mapt.valueType).type.toSource() + ">").replace("List", "Vector")
+ "();");
} else
{
sb.append("\n\n\t\t@SuppressWarnings(\"rawtypes\")");
sb.append("\n\n\t\t" + t.toSource() + " pTmp" + pCount
+ " = new "
+ t.toSource().replace("List", "Vector") + "();");
}
sb.append("\n\t\tfor( IStruct a: " + key + ")");
sb.append("\n\t\t{");