//-- select naming for types and instances
boolean useValuesAsName = true;
while (enumeration.hasMoreElements()) {
Facet facet = (Facet)enumeration.nextElement();
String possibleId = translateEnumValueToIdentifier(facet.getValue());
if (!JavaNaming.isValidJavaIdentifier(possibleId)) {
useValuesAsName = false;
break;
}
}
enumeration = simpleType.getFacets("enumeration");
JClass jClass = state.jClass;
String className = jClass.getLocalName();
JField field = null;
JField fHash = new JField(SGTypes.Hashtable, "_memberTable");
fHash.setInitString("init()");
fHash.getModifiers().setStatic(true);
JDocComment jdc = null;
JSourceCode jsc = null;
//-- modify constructor
JConstructor constructor = jClass.getConstructor(0);
constructor.getModifiers().makePrivate();
constructor.addParameter(new JParameter(JType.Int, "type"));
constructor.addParameter(new JParameter(SGTypes.String, "value"));
jsc = constructor.getSourceCode();
jsc.add("this.type = type;");
jsc.add("this.stringValue = value;");
//-- #valueOf method
JMethod mValueOf = new JMethod(jClass, "valueOf");
mValueOf.addParameter(new JParameter(SGTypes.String, "string"));
mValueOf.getModifiers().setStatic(true);
jClass.addMethod(mValueOf);
jdc = mValueOf.getJDocComment();
jdc.appendComment("Returns a new " + className);
jdc.appendComment(" based on the given String value.");
jsc = mValueOf.getSourceCode();
jsc.add("java.lang.Object obj = null;");
jsc.add("if (string != null) ");
jsc.append("obj = _memberTable.get(string);");
jsc.add("if (obj == null) {");
jsc.indent();
jsc.add("String err = \"'\" + string + \"' is not a valid ");
jsc.append(className);
jsc.append("\";");
jsc.add("throw new IllegalArgumentException(err);");
jsc.unindent();
jsc.add("}");
jsc.add("return (");
jsc.append(className);
jsc.append(") obj;");
//-- #enumerate method
JMethod mEnumerate = new JMethod(SGTypes.Enumeration, "enumerate");
mEnumerate.getModifiers().setStatic(true);
jClass.addMethod(mEnumerate);
jdc = mEnumerate.getJDocComment();
jdc.appendComment("Returns an enumeration of all possible instances of ");
jdc.appendComment(className);
mEnumerate.getSourceCode().add("return _memberTable.elements();");
//-- #toString method
JMethod mToString = new JMethod(SGTypes.String, "toString");
jClass.addMethod(mToString);
jdc = mToString.getJDocComment();
jdc.appendComment("Returns the String representation of this ");
jdc.appendComment(className);
mToString.getSourceCode().add("return this.stringValue;");
//-- #init method
JMethod mInit = new JMethod(SGTypes.Hashtable, "init");
jClass.addMethod(mInit);
mInit.getModifiers().makePrivate();
mInit.getModifiers().setStatic(true);
mInit.getSourceCode().add("Hashtable members = new Hashtable();");
//-- #readResolve method
JMethod mReadResolve = new JMethod(SGTypes.Object,"readResolve");
mReadResolve.getModifiers().makePrivate();
jClass.addMethod(mReadResolve);
jdc = mReadResolve.getJDocComment();
jdc.appendComment(" will be called during deserialization to replace ");
jdc.appendComment("the deserialized object with the correct constant ");
jdc.appendComment("instance. <br/>");
jsc = mReadResolve.getSourceCode();
jsc.add("return valueOf(this.stringValue);");
//-- Loop through "enumeration" facets
int count = 0;
while (enumeration.hasMoreElements()) {
Facet facet = (Facet) enumeration.nextElement();
String value = facet.getValue();
String typeName = null;
String objName = null;
if (useValuesAsName) objName = translateEnumValueToIdentifier(value);