package org.geotools.maven.xmlcodegen.templates;
import org.geotools.maven.xmlcodegen.*;
import java.util.*;
import org.apache.xml.serialize.*;
import org.eclipse.xsd.*;
import java.io.*;
import org.geotools.xml.*;
public class CLASS
{
protected static String nl;
public static synchronized CLASS create(String lineSeparator)
{
nl = lineSeparator;
CLASS result = new CLASS();
nl = null;
return result;
}
public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
protected final String TEXT_1 = NL + "import org.geotools.xml.*;" + NL + "import ";
protected final String TEXT_2 = ";" + NL;
protected final String TEXT_3 = NL + "import ";
protected final String TEXT_4 = ";\t\t";
protected final String TEXT_5 = NL + NL + "import javax.xml.namespace.QName;" + NL + "" + NL + "/**" + NL + " * Binding object for the ";
protected final String TEXT_6 = " ";
protected final String TEXT_7 = ":";
protected final String TEXT_8 = "." + NL + " *" + NL + " * <p>" + NL + " *\t<pre>" + NL + " *\t <code>";
protected final String TEXT_9 = NL + " * ";
protected final String TEXT_10 = " " + NL + " *\t\t" + NL + " *\t </code>" + NL + " *\t </pre>" + NL + " * </p>" + NL + " *" + NL + " * @generated" + NL + " */";
protected final String TEXT_11 = NL + "public class ";
protected final String TEXT_12 = " extends ";
protected final String TEXT_13 = " {" + NL;
protected final String TEXT_14 = NL + "\t";
protected final String TEXT_15 = " ";
protected final String TEXT_16 = ";\t";
protected final String TEXT_17 = "\t" + NL + "\t";
protected final String TEXT_18 = NL + "\t/**" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic QName getTarget() {" + NL + "\t\treturn ";
protected final String TEXT_19 = ".";
protected final String TEXT_20 = ";" + NL + "\t}" + NL + "\t" + NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t *\t" + NL + "\t * @generated modifiable" + NL + "\t */\t" + NL + "\tpublic Class getType() {" + NL + "\t\treturn null;" + NL + "\t}" + NL + "\t";
protected final String TEXT_21 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t *\t" + NL + "\t * @generated modifiable" + NL + "\t */\t" + NL + "\tpublic Object parse(InstanceComponent instance, Object value) " + NL + "\t\tthrows Exception {" + NL + "\t\t" + NL + "\t\t//TODO: implement and remove call to super" + NL + "\t\treturn super.parse(instance,value);" + NL + "\t}" + NL;
protected final String TEXT_22 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t *\t" + NL + "\t * @generated modifiable" + NL + "\t */\t" + NL + "\tpublic Object parse(ElementInstance instance, Node node, Object value) " + NL + "\t\tthrows Exception {" + NL + "\t\t" + NL + "\t\t//TODO: implement and remove call to super" + NL + "\t\treturn super.parse(instance,node,value);" + NL + "\t}" + NL;
protected final String TEXT_23 = NL + "}";
public String generate(Object argument)
{
final StringBuffer stringBuffer = new StringBuffer();
Object[] arguments = (Object[]) argument;
XSDNamedComponent named = (XSDNamedComponent)arguments[0];
BindingConstructorArgument[] constructorArgs = (BindingConstructorArgument[]) arguments[1];
Class bindingBaseClass = (Class)arguments[2];
XSDSchema schema = named.getSchema();
XSDTypeDefinition type = null;
String desc = null;
if (named instanceof XSDTypeDefinition) {
type = (XSDTypeDefinition)named;
desc = "type";
}
if (named instanceof XSDElementDeclaration) {
type = ((XSDElementDeclaration)named).getTypeDefinition();
desc = "element";
}
if (named instanceof XSDAttributeDeclaration) {
type = ((XSDAttributeDeclaration)named).getTypeDefinition();
desc = "attribute";
}
String ns = schema.getTargetNamespace();
String prefix = Schemas.getTargetPrefix( schema );
stringBuffer.append(TEXT_1);
stringBuffer.append(bindingBaseClass.getName());
stringBuffer.append(TEXT_2);
if ( constructorArgs != null ) {
for ( int i = 0;i < constructorArgs.length; i++ ) {
Class arg = constructorArgs[i].clazz;
stringBuffer.append(TEXT_3);
stringBuffer.append(arg.getName());
stringBuffer.append(TEXT_4);
}
}
stringBuffer.append(TEXT_5);
stringBuffer.append(desc);
stringBuffer.append(TEXT_6);
stringBuffer.append(named.getTargetNamespace());
stringBuffer.append(TEXT_7);
stringBuffer.append(named.getName());
stringBuffer.append(TEXT_8);
OutputFormat output = new OutputFormat();
output.setOmitXMLDeclaration(true);
output.setIndenting(true);
StringWriter writer = new StringWriter();
XMLSerializer serializer = new XMLSerializer(writer,output);
try {
serializer.serialize(named.getElement());
}
catch (IOException e) {
e.printStackTrace();
return null;
}
String[] lines = writer.getBuffer().toString().split("\n");
for (int i = 0; i < lines.length; i++) {
stringBuffer.append(TEXT_9);
stringBuffer.append(lines[i].replaceAll("<","<").replaceAll(">",">"));
}
stringBuffer.append(TEXT_10);
String className = named.getName().substring(0,1).toUpperCase() +
named.getName().substring(1) + "Binding";
String baseClassName = bindingBaseClass.getName();
baseClassName = baseClassName.substring(bindingBaseClass.getPackage().getName().length()+1);
stringBuffer.append(TEXT_11);
stringBuffer.append(className);
stringBuffer.append(TEXT_12);
stringBuffer.append(baseClassName);
stringBuffer.append(TEXT_13);
if ( constructorArgs != null ) {
List fieldNames = new ArrayList();
StringBuffer constructor = new StringBuffer();
constructor.append("public " + className + "( ");
for ( int i = 0; i < constructorArgs.length; i++ ) {
String fieldName = constructorArgs[i].getName();
Class arg = constructorArgs[i].clazz;
String typeName = arg.getName();
if ( typeName.lastIndexOf( '.' ) != -1 ) {
typeName = typeName.substring( typeName.lastIndexOf( '.') + 1 );
}
fieldNames.add( fieldName );
if ( "member".equals(constructorArgs[i].getMode() ) ) {
stringBuffer.append(TEXT_14);
stringBuffer.append(typeName);
stringBuffer.append(TEXT_15);
stringBuffer.append(fieldName);
stringBuffer.append(TEXT_16);
}
constructor.append( typeName + " " + fieldName );
constructor.append( "," );
}
constructor.setLength( constructor.length()-1 );
constructor.append( " ) {\n");
constructor.append( "\t\tsuper(");
boolean trim = false;
for ( int i = 0; i < constructorArgs.length; i++ ) {
String fieldName = (String) fieldNames.get(i);
if ( "parent".equals( constructorArgs[i].getMode() ) ) {
constructor.append(fieldName + ",");
trim = true;
}
}
if (trim) {
constructor.setLength(constructor.length()-1);
}
constructor.append( ");\n");
for ( int i = 0; i < constructorArgs.length; i++ ) {
String fieldName = (String) fieldNames.get(i);
if ( "member".equals( constructorArgs[i].getMode() ) ) {
constructor.append( "\t\tthis." + fieldName + " = " + fieldName + ";\n");
}
}
constructor.append( "\t}\n" );
stringBuffer.append(TEXT_17);
stringBuffer.append(constructor.toString());
}
stringBuffer.append(TEXT_18);
stringBuffer.append(prefix.toUpperCase());
stringBuffer.append(TEXT_19);
stringBuffer.append(named.getName());
stringBuffer.append(TEXT_20);
if (type instanceof XSDSimpleTypeDefinition) {
stringBuffer.append(TEXT_21);
}
else {
stringBuffer.append(TEXT_22);
}
stringBuffer.append(TEXT_23);
return stringBuffer.toString();
}
}