diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2007-02-14 20:02:03 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2007-02-14 20:02:03 +0000 |
| commit | a22f3f594d6eee7d610fb4f140e18cddd7c880f6 (patch) | |
| tree | 5adb376ed217d2debaff1c0bdd59af1a1c93e829 /gentools/src | |
| parent | 9cb1922884c5b258c961046e6fd48e5152aa79d5 (diff) | |
| download | qpid-python-a22f3f594d6eee7d610fb4f140e18cddd7c880f6.tar.gz | |
First backmerge from trunk to 0-9 branch for Java. Not all java tests passing yet
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@507672 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'gentools/src')
3 files changed, 483 insertions, 44 deletions
diff --git a/gentools/src/org/apache/qpid/gentools/DotnetGenerator.java b/gentools/src/org/apache/qpid/gentools/DotnetGenerator.java new file mode 100644 index 0000000000..505a70dc85 --- /dev/null +++ b/gentools/src/org/apache/qpid/gentools/DotnetGenerator.java @@ -0,0 +1,339 @@ +/* + * + * 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.qpid.gentools; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.TreeMap; + +public class DotnetGenerator extends Generator +{ + private class DomainInfo + { + public String type; + public String size; + public String encodeExpression; + public String decodeExpression; + public DomainInfo(String domain, String size, String encodeExpression, String decodeExpression) + { + this.type = domain; + this.size = size; + this.encodeExpression = encodeExpression; + this.decodeExpression = decodeExpression; + } + } + + private static TreeMap<String, DomainInfo> typeMap = new TreeMap<String, DomainInfo>(); + + public DotnetGenerator(AmqpVersionSet versionList) + { + super(versionList); + // Load .NET type and size maps. + // Adjust or add to these lists as new types are added/defined. + // The char '#' will be replaced by the field variable name (any type). + // The char '~' will be replaced by the compacted bit array size (type bit only). + // TODO: I have left a copy of the Java typeMap here - replace with appropriate .NET values. + typeMap.put("bit", new DomainInfo( + "boolean", // .NET code type + "~", // size + "EncodingUtils.writeBooleans(buffer, #)", // encode expression + "# = EncodingUtils.readBooleans(buffer)")); // decode expression + typeMap.put("content", new DomainInfo( + "Content", // .NET code type + "EncodingUtils.encodedContentLength(#)", // size + "EncodingUtils.writeContentBytes(buffer, #)", // encode expression + "# = EncodingUtils.readContent(buffer)")); // decode expression + typeMap.put("long", new DomainInfo( + "long", // .NET code type + "4", // size + "EncodingUtils.writeUnsignedInteger(buffer, #)", // encode expression + "# = buffer.getUnsignedInt()")); // decode expression + typeMap.put("longlong", new DomainInfo( + "long", // .NET code type + "8", // size + "buffer.putLong(#)", // encode expression + "# = buffer.getLong()")); // decode expression + typeMap.put("longstr", new DomainInfo( + "byte[]", // .NET code type + "EncodingUtils.encodedLongstrLength(#)", // size + "EncodingUtils.writeLongStringBytes(buffer, #)", // encode expression + "# = EncodingUtils.readLongstr(buffer)")); // decode expression + typeMap.put("octet", new DomainInfo( + "short", // .NET code type + "1", // size + "EncodingUtils.writeUnsignedByte(buffer, #)", // encode expression + "# = buffer.getUnsigned()")); // decode expression + typeMap.put("short", new DomainInfo( + "int", // .NET code type + "2", // size + "EncodingUtils.writeUnsignedShort(buffer, #)", // encode expression + "# = buffer.getUnsignedShort()")); // decode expression + typeMap.put("shortstr", new DomainInfo( + "AMQShortString", // .NET code type + "EncodingUtils.encodedShortStringLength(#)", // size + "EncodingUtils.writeShortStringBytes(buffer, #)", // encode expression + "# = EncodingUtils.readAMQShortString(buffer)")); // decode expression + typeMap.put("table", new DomainInfo( + "FieldTable", // .NET code type + "EncodingUtils.encodedFieldTableLength(#)", // size + "EncodingUtils.writeFieldTableBytes(buffer, #)", // encode expression + "# = EncodingUtils.readFieldTable(buffer)")); // decode expression + typeMap.put("timestamp", new DomainInfo( + "long", // .NET code type + "8", // size + "EncodingUtils.writeTimestamp(buffer, #)", // encode expression + "# = EncodingUtils.readTimestamp(buffer)")); // decode expression + } + + @Override + protected String prepareFilename(String filenameTemplate, + AmqpClass thisClass, AmqpMethod method, AmqpField field) + { + StringBuffer sb = new StringBuffer(filenameTemplate); + if (thisClass != null) + replaceToken(sb, "${CLASS}", thisClass.name); + if (method != null) + replaceToken(sb, "${METHOD}", method.name); + if (field != null) + replaceToken(sb, "${FIELD}", field.name); + return sb.toString(); + } + + @Override + protected void processClassList(StringBuffer sb, int listMarkerStartIndex, + int listMarkerEndIndex, AmqpModel model) + throws AmqpTemplateException, AmqpTypeMappingException + { + String codeSnippet; + int lend = sb.indexOf(cr, listMarkerStartIndex) + 1; // Include cr at end of line + String tline = sb.substring(listMarkerEndIndex, lend); // Line excluding line marker, including cr + int tokStart = tline.indexOf('$'); + String token = tline.substring(tokStart).trim(); + sb.delete(listMarkerStartIndex, lend); + + // TODO: Add in tokens and calls to their corresponding generator methods here... + if (token.compareTo("${??????????}") == 0) + { + codeSnippet = token; // This is a stub to get the compile working - remove when gen method is present. +// codeSnippet = generateRegistry(model, 8, 4); + } + + else // Oops! + { + throw new AmqpTemplateException("Template token " + token + " unknown."); + } + sb.insert(listMarkerStartIndex, codeSnippet); + } + + @Override + protected void processConstantList(StringBuffer sb, + int listMarkerStartIndex, int listMarkerEndIndex, + AmqpConstantSet constantSet) throws AmqpTemplateException, + AmqpTypeMappingException + { + String codeSnippet; + int lend = sb.indexOf(cr, listMarkerStartIndex) + 1; // Include cr at end of line + String tline = sb.substring(listMarkerEndIndex, lend); // Line excluding line marker, including cr + int tokStart = tline.indexOf('$'); + String token = tline.substring(tokStart).trim(); + sb.delete(listMarkerStartIndex, lend); + + // TODO: Add in tokens and calls to their corresponding generator methods here... + if (token.compareTo("${??????????}") == 0) + { + codeSnippet = token; // This is a stub to get the compile working - remove when gen method is present. +// codeSnippet = generateConstantGetMethods(constantSet, 4, 4); + } + + else // Oops! + { + throw new AmqpTemplateException("Template token " + token + " unknown."); + } + sb.insert(listMarkerStartIndex, codeSnippet); + } + + @Override + protected void processFieldList(StringBuffer sb, int listMarkerStartIndex, + int listMarkerEndIndex, AmqpFieldMap fieldMap, AmqpVersion version) + throws AmqpTypeMappingException, AmqpTemplateException, + IllegalAccessException, InvocationTargetException + { + String codeSnippet; + int lend = sb.indexOf(cr, listMarkerStartIndex) + 1; // Include cr at end of line + String tline = sb.substring(listMarkerEndIndex, lend); // Line excluding line marker, including cr + int tokStart = tline.indexOf('$'); + String token = tline.substring(tokStart).trim(); + sb.delete(listMarkerStartIndex, lend); + + // TODO: Add in tokens and calls to their corresponding generator methods here... + if (token.compareTo("${??????????}") == 0) + { + codeSnippet = token; // This is a stub to get the compile working - remove when gen method is present. +// codeSnippet = fieldMap.parseFieldMap(declarationGenerateMethod, +// mangledDeclarationGenerateMethod, 4, 4, this); + } + + else // Oops! + { + throw new AmqpTemplateException("Template token " + token + " unknown."); + } + sb.insert(listMarkerStartIndex, codeSnippet); + } + + @Override + protected void processMethodList(StringBuffer sb, int listMarkerStartIndex, + int listMarkerEndIndex, AmqpClass thisClass) + throws AmqpTemplateException, AmqpTypeMappingException + { + String codeSnippet; + int lend = sb.indexOf(cr, listMarkerStartIndex) + 1; // Include cr at end of line + String tline = sb.substring(listMarkerEndIndex, lend); // Line excluding line marker, including cr + int tokStart = tline.indexOf('$'); + String token = tline.substring(tokStart).trim(); + sb.delete(listMarkerStartIndex, lend); + + // TODO: Add in tokens and calls to their corresponding generator methods here... + if (token.compareTo("${??????????}") == 0) + { + codeSnippet = token; // This is a stub to get the compile working - remove when gen method is present. + } + + else // Oops! + { + throw new AmqpTemplateException("Template token " + token + " unknown."); + } + sb.insert(listMarkerStartIndex, codeSnippet); + } + + @Override + protected void processTemplateA(String[] template) throws IOException, + AmqpTemplateException, AmqpTypeMappingException, + IllegalAccessException, InvocationTargetException + { + // I've put in the Java model here - this can be changed if a different pattern is required. + processTemplateD(template, null, null, null); + } + + @Override + protected void processTemplateB(String[] template, AmqpClass thisClass) + throws IOException, AmqpTemplateException, + AmqpTypeMappingException, IllegalAccessException, + InvocationTargetException + { + // I've put in the Java model here - this can be changed if a different pattern is required. + processTemplateD(template, thisClass, null, null); + } + + @Override + protected void processTemplateC(String[] template, AmqpClass thisClass, + AmqpMethod method) throws IOException, AmqpTemplateException, + AmqpTypeMappingException, IllegalAccessException, + InvocationTargetException + { + // I've put in the Java model here - this can be changed if a different pattern is required. + processTemplateD(template, thisClass, method, null); + } + + @Override + protected void processTemplateD(String[] template, AmqpClass thisClass, + AmqpMethod method, AmqpField field) throws IOException, + AmqpTemplateException, AmqpTypeMappingException, + IllegalAccessException, InvocationTargetException + { + // I've put in the Java model here - this can be changed if a different pattern is required. + StringBuffer sb = new StringBuffer(template[1]); + String filename = prepareFilename(getTemplateFileName(sb), thisClass, method, field); + try { processAllLists(sb, thisClass, method, null); } + catch (AmqpTemplateException e) + { + System.out.println("WARNING: " + template[templateFileNameIndex] + ": " + e.getMessage()); + } + try { processAllTokens(sb, thisClass, method, field, null); } + catch (AmqpTemplateException e) + { + System.out.println("WARNING: " + template[templateFileNameIndex] + ": " + e.getMessage()); + } + writeTargetFile(sb, new File(genDir + Utils.fileSeparator + filename)); + generatedFileCounter ++; + } + + @Override + protected String processToken(String token, AmqpClass thisClass, + AmqpMethod method, AmqpField field, AmqpVersion version) + throws AmqpTemplateException, AmqpTypeMappingException + { + // TODO Auto-generated method stub + return null; + } + + public String getDomainType(String domainName, AmqpVersion version) + throws AmqpTypeMappingException + { + return globalDomainMap.getDomainType(domainName, version); + } + + public String getGeneratedType(String domainName, AmqpVersion version) + throws AmqpTypeMappingException + { + String domainType = globalDomainMap.getDomainType(domainName, version); + if (domainType == null) + { + throw new AmqpTypeMappingException("Domain type \"" + domainName + + "\" not found in Java typemap."); + } + DomainInfo info = typeMap.get(domainType); + if (info == null) + { + throw new AmqpTypeMappingException("Unknown domain: \"" + domainType + "\""); + } + return info.type; + } + + public String prepareClassName(String className) + { + return camelCaseName(className, true); + } + + public String prepareDomainName(String domainName) + { + return camelCaseName(domainName, false); + } + + public String prepareMethodName(String methodName) + { + return camelCaseName(methodName, false); + } + + private String camelCaseName(String name, boolean upperFirstFlag) + { + StringBuffer ccn = new StringBuffer(); + String[] toks = name.split("[-_.\\ ]"); + for (int i=0; i<toks.length; i++) + { + StringBuffer b = new StringBuffer(toks[i]); + if (upperFirstFlag || i>0) + b.setCharAt(0, Character.toUpperCase(toks[i].charAt(0))); + ccn.append(b); + } + return ccn.toString(); + } +} diff --git a/gentools/src/org/apache/qpid/gentools/JavaGenerator.java b/gentools/src/org/apache/qpid/gentools/JavaGenerator.java index 036af79902..9acfaf65fa 100644 --- a/gentools/src/org/apache/qpid/gentools/JavaGenerator.java +++ b/gentools/src/org/apache/qpid/gentools/JavaGenerator.java @@ -61,7 +61,9 @@ public class JavaGenerator extends Generator static private Method mbGetGenerateMethod; static private Method mbMangledGetGenerateMethod; static private Method mbParamListGenerateMethod; + static private Method mbPassedParamListGenerateMethod; static private Method mbMangledParamListGenerateMethod; + static private Method mbMangledPassedParamListGenerateMethod; static private Method mbBodyInitGenerateMethod; static private Method mbMangledBodyInitGenerateMethod; static private Method mbSizeGenerateMethod; @@ -131,11 +133,22 @@ public class JavaGenerator extends Generator AmqpVersionSet.class, int.class, int.class, boolean.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } + + try { mbPassedParamListGenerateMethod = JavaGenerator.class.getDeclaredMethod( + "generateMbPassedParamList", String.class, AmqpField.class, + AmqpVersionSet.class, int.class, int.class, boolean.class); } + catch (NoSuchMethodException e) { e.printStackTrace(); } + try { mbMangledParamListGenerateMethod = JavaGenerator.class.getDeclaredMethod( "generateMbMangledParamList", AmqpField.class, int.class, int.class, boolean.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } + try { mbMangledPassedParamListGenerateMethod = JavaGenerator.class.getDeclaredMethod( + "generateMbMangledPassedParamList", AmqpField.class, + int.class, int.class, boolean.class); } + catch (NoSuchMethodException e) { e.printStackTrace(); } + try { mbBodyInitGenerateMethod = JavaGenerator.class.getDeclaredMethod( "generateMbBodyInit", String.class, AmqpField.class, AmqpVersionSet.class, int.class, int.class, boolean.class); } @@ -320,10 +333,10 @@ public class JavaGenerator extends Generator "EncodingUtils.writeUnsignedShort(buffer, #)", // encode expression "# = buffer.getUnsignedShort()")); // decode expression typeMap.put("shortstr", new DomainInfo( - "String", // Java code type + "AMQShortString", // Java code type "EncodingUtils.encodedShortStringLength(#)", // size "EncodingUtils.writeShortStringBytes(buffer, #)", // encode expression - "# = EncodingUtils.readShortString(buffer)")); // decode expression + "# = EncodingUtils.readAMQShortString(buffer)")); // decode expression typeMap.put("table", new DomainInfo( "FieldTable", // Java code type "EncodingUtils.encodedFieldTableLength(#)", // size @@ -457,11 +470,11 @@ public class JavaGenerator extends Generator if (token.compareTo("${CLASS}") == 0 && thisClass != null) return thisClass.name; if (token.compareTo("${CLASS_ID_INIT}") == 0 && thisClass != null) - return generateIndexInitializer("classIdMap", thisClass.indexMap, 8); + return generateIndexInitializer("registerClassId", thisClass.indexMap, 8); if (token.compareTo("${METHOD}") == 0 && method != null) return method.name; if (token.compareTo("${METHOD_ID_INIT}") == 0 && method != null) - return generateIndexInitializer("methodIdMap", method.indexMap, 8); + return generateIndexInitializer("registerMethodId", method.indexMap, 8); if (token.compareTo("${FIELD}") == 0 && field != null) return field.name; @@ -573,6 +586,16 @@ public class JavaGenerator extends Generator codeSnippet += fieldMap.parseFieldMap(mbParamListGenerateMethod, mbMangledParamListGenerateMethod, 42, 4, this); } + + else if (token.compareTo("${mb_field_passed_parameter_list}") == 0) + { + // <cringe> The code generated by this is ugly... It puts a comma on a line by itself! + // TODO: Find a more elegant solution here sometime... + codeSnippet = fieldMap.size() > 0 ? Utils.createSpaces(42) + "," + cr : ""; + // </cringe> + codeSnippet += fieldMap.parseFieldMap(mbPassedParamListGenerateMethod, + mbMangledPassedParamListGenerateMethod, 42, 4, this); + } else if (token.compareTo("${mb_field_body_initialize}") == 0) { codeSnippet = fieldMap.parseFieldMap(mbBodyInitGenerateMethod, @@ -712,16 +735,12 @@ public class JavaGenerator extends Generator String indent = Utils.createSpaces(indentSize); StringBuffer sb = new StringBuffer(); - Iterator<Integer> iItr = indexMap.keySet().iterator(); - while (iItr.hasNext()) + for (Integer index : indexMap.keySet()) { - int index = iItr.next(); AmqpVersionSet versionSet = indexMap.get(index); - Iterator<AmqpVersion> vItr = versionSet.iterator(); - while (vItr.hasNext()) + for (AmqpVersion version : versionSet) { - AmqpVersion version = vItr.next(); - sb.append(indent + mapName + ".put(\"" + version.toString() + "\", " + index + ");" + cr); + sb.append(indent + mapName + "( (byte) " + version.getMajor() +", (byte) " + version.getMinor() + ", " + index + ");" + cr); } } return sb.toString(); @@ -746,12 +765,12 @@ public class JavaGenerator extends Generator { int classIndex = findIndex(thisClass.indexMap, version); int methodIndex = findIndex(method.indexMap, version); - sb.append(indent + "classIDMethodIDVersionBodyMap.put(" + cr); - sb.append(indent + tab + "createMapKey((short)" + classIndex + - ", (short)" + methodIndex + ", (byte)" + version.getMajor() + - ", (byte)" + version.getMinor() + "), " + cr); + sb.append(indent + "registerMethod(" + cr); + sb.append(indent + tab + "(short)" + classIndex + + ", (short)" + methodIndex + ", (byte)" + version.getMajor() + + ", (byte)" + version.getMinor() + ", " + cr); sb.append(indent + tab + Utils.firstUpper(thisClass.name) + - Utils.firstUpper(method.name) + "Body.class);" + cr); + Utils.firstUpper(method.name) + "Body.getFactory());" + cr); } catch (Exception e) {} // Ignore } @@ -924,6 +943,15 @@ public class JavaGenerator extends Generator (nextFlag ? "," : "") + " // AMQP version(s): " + versionSet + cr; } + + protected String generateMbPassedParamList(String codeType, AmqpField field, + AmqpVersionSet versionSet, int indentSize, int tabSize, boolean nextFlag) + { + return Utils.createSpaces(indentSize) + field.name + + (nextFlag ? "," : "") + " // AMQP version(s): " + versionSet + cr; + } + + protected String generateMbMangledParamList(AmqpField field, int indentSize, int tabSize, boolean nextFlag) throws AmqpTypeMappingException @@ -943,10 +971,29 @@ public class JavaGenerator extends Generator return sb.toString(); } + protected String generateMbMangledPassedParamList(AmqpField field, int indentSize, + int tabSize, boolean nextFlag) + throws AmqpTypeMappingException + { + StringBuffer sb = new StringBuffer(); + Iterator<String> dItr = field.domainMap.keySet().iterator(); + int domainCntr = 0; + while (dItr.hasNext()) + { + String domainName = dItr.next(); + AmqpVersionSet versionSet = field.domainMap.get(domainName); + sb.append(Utils.createSpaces(indentSize) + field.name + "_" + + (domainCntr++) + (nextFlag ? "," : "") + " // AMQP version(s): " + + versionSet + cr); + } + return sb.toString(); + } + + protected String generateMbBodyInit(String codeType, AmqpField field, AmqpVersionSet versionSet, int indentSize, int tabSize, boolean nextFlag) { - return Utils.createSpaces(indentSize) + "bodyFrame." + field.name + " = " + field.name + + return Utils.createSpaces(indentSize) + "this." + field.name + " = " + field.name + ";" + cr; } @@ -1004,23 +1051,26 @@ public class JavaGenerator extends Generator int ordinal, int indentSize, int tabSize) { String indent = Utils.createSpaces(indentSize); - String bitArrayName = "bitArray_" + ordinal; - StringBuffer sb = new StringBuffer(indent + "boolean[] " + bitArrayName + - " = new boolean[] { "); - for (int i=0; i<bitFieldList.size(); i++) + + StringBuilder sb = new StringBuilder(); + int i = 0; + while(i <bitFieldList.size()) { - if (i != 0) + + StringBuilder line = new StringBuilder(); + + for (int j=0; i<bitFieldList.size() && j<8; i++, j++) { - if ((i + 3) % 6 == 0) - sb.append("," + cr + indent + Utils.createSpaces(tabSize)); - else - sb.append(", "); + if (j != 0) + { + line.append(", "); + } + line.append(bitFieldList.get(i)); } - sb.append(bitFieldList.get(i)); + + sb.append(indent + + typeMap.get("bit").encodeExpression.replaceAll("#", line.toString()) + ";" + cr); } - sb.append(" };" + cr); - sb.append(Utils.createSpaces(indentSize) + - typeMap.get("bit").encodeExpression.replaceAll("#", bitArrayName) + ";" + cr); return sb.toString(); } @@ -1038,14 +1088,25 @@ public class JavaGenerator extends Generator int ordinal, int indentSize, int tabSize) { String indent = Utils.createSpaces(indentSize); - String bitArrayName = "bitArray_" + ordinal; - StringBuffer sb = new StringBuffer(); - sb.append(indent + - typeMap.get("bit").decodeExpression.replaceAll("#", "boolean[] " + bitArrayName) + - ";" + cr); - for (int i=0; i<bitFieldList.size(); i++) + + StringBuilder sb = new StringBuilder(indent); + // Multiple occurrences of byte value blocks will result in multiple declarations + // unless each is named uniquely. + String varName = "packedValue_" + ordinal; + sb.append("byte " + varName + ";"); + sb.append(cr); + + // RG HERE! + + int i = 0; + while(i < bitFieldList.size()) { - sb.append(indent + bitFieldList.get(i) + " = " + bitArrayName + "[" + i + "];" + cr); + sb.append(indent + varName + " = EncodingUtils.readByte(buffer);" + cr); + + for(int j = 0; i < bitFieldList.size() && j < 8; i++, j++) + { + sb.append(indent + bitFieldList.get(i) + " = ( " + varName + " & (byte) (1 << " + j + ") ) != 0;" + cr); + } } return sb.toString(); } diff --git a/gentools/src/org/apache/qpid/gentools/Main.java b/gentools/src/org/apache/qpid/gentools/Main.java index 3ba6801375..e8c8a80a26 100644 --- a/gentools/src/org/apache/qpid/gentools/Main.java +++ b/gentools/src/org/apache/qpid/gentools/Main.java @@ -38,8 +38,11 @@ public class Main { private static final String defaultOutDir = ".." + Utils.fileSeparator + "gen"; private static final String defaultCppTemplateDir = ".." + Utils.fileSeparator + "templ.cpp"; + private static final String defaultDotnetTemplateDir = ".." + Utils.fileSeparator + "templ.net"; private static final String defaultJavaTemplateDir = ".." + Utils.fileSeparator + "templ.java"; + private enum GeneratorLangEnum { CPP, DOTNET, JAVA } + private DocumentBuilder docBuilder; private AmqpVersionSet versionSet; private Generator generator; @@ -49,7 +52,7 @@ public class Main private String outDir; private String tmplDir; - private boolean javaFlag; + private GeneratorLangEnum generatorLang; private ArrayList<String> xmlFiles; private File[] modelTemplateFiles; private File[] classTemplateFiles; @@ -81,13 +84,20 @@ public class Main // 0. Initialize outDir = defaultOutDir; tmplDir = null; - javaFlag = true; + generatorLang = GeneratorLangEnum.CPP; // Default generation language xmlFiles.clear(); processArgs(args); - if (javaFlag) - prepareJava(); - else + switch (generatorLang) + { + case JAVA: + prepareJava(); + break; + case DOTNET: + prepareDotnet(); + break; + default: prepareCpp(); + } if (modelTemplateFiles.length == 0 && classTemplateFiles.length == 0 && methodTemplateFiles.length == 0 && fieldTemplateFiles.length == 0) @@ -128,11 +138,15 @@ public class Main { case 'c': case 'C': - javaFlag = false; + generatorLang = GeneratorLangEnum.CPP; break; case 'j': case 'J': - javaFlag = true; + generatorLang = GeneratorLangEnum.JAVA; + break; + case 'n': + case 'N': + generatorLang = GeneratorLangEnum.DOTNET; break; case 'o': case 'O': @@ -182,6 +196,30 @@ public class Main }; } + private void prepareDotnet() + { + if (tmplDir == null) + tmplDir = defaultDotnetTemplateDir; + System.out.println(".NET generation mode."); + generator = new DotnetGenerator(versionSet); + constants = new AmqpConstantSet(generator); + domainMap = new AmqpDomainMap(generator); + model = new AmqpModel(generator); + // TODO: Add templated that should be handled in here... + modelTemplateFiles = new File[] + { +// new File(tmplDir + Utils.fileSeparator + "XXXClass.tmpl"), + }; + classTemplateFiles = new File[] + { +// new File(tmplDir + Utils.fileSeparator + "XXXClass.tmpl"), + }; + methodTemplateFiles = new File[] + { +// new File(tmplDir + Utils.fileSeparator + "XXXClass.tmpl"), + }; + } + private void prepareCpp() { if (tmplDir == null) @@ -293,6 +331,7 @@ public class Main System.out.println("Usage: Main -c|-j [-o outDir] [-t tmplDir] XMLfile [XMLfile ...]"); System.out.println(" where -c: Generate C++."); System.out.println(" -j: Generate Java."); + System.out.println(" -n: Generate .NET."); System.out.println(" -o outDir: Use outDir as the output dir (default=\"" + defaultOutDir + "\")."); System.out.println(" -t tmplDir: Find templates in tmplDir."); System.out.println(" Defaults: \"" + defaultCppTemplateDir + "\" for C++;"); |
