| /** |
| * 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.activemq.openwire.tool; |
| |
| import java.io.File; |
| import java.io.PrintWriter; |
| import java.io.StringWriter; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.codehaus.jam.JClass; |
| import org.codehaus.jam.JProperty; |
| |
| /** |
| * |
| */ |
| public class CSharpClassesGenerator extends MultiSourceGenerator { |
| |
| protected String targetDir = "./src/main/csharp"; |
| |
| public Object run() { |
| filePostFix = ".cs"; |
| if (destDir == null) { |
| destDir = new File(targetDir + "/ActiveMQ/Commands"); |
| } |
| return super.run(); |
| } |
| |
| public String makeHashCodeBody() throws Exception { |
| if (simpleName.endsWith("Id")) { |
| StringWriter buffer = new StringWriter(); |
| PrintWriter out = new PrintWriter(buffer); |
| out.println(" int answer = 0;"); |
| Iterator iter = getProperties().iterator(); |
| while (iter.hasNext()) { |
| JProperty property = (JProperty)iter.next(); |
| out.println(" answer = (answer * 37) + HashCode(" + property.getSimpleName() + ");"); |
| } |
| out.println(" return answer;"); |
| return buffer.toString(); |
| } |
| return null; |
| } |
| |
| public String makeEqualsBody() throws Exception { |
| if (simpleName.endsWith("Id")) { |
| StringWriter buffer = new StringWriter(); |
| PrintWriter out = new PrintWriter(buffer); |
| |
| Iterator iter = getProperties().iterator(); |
| while (iter.hasNext()) { |
| JProperty property = (JProperty)iter.next(); |
| String name = property.getSimpleName(); |
| out.println(" if (! Equals(this." + name + ", that." + name + ")) return false;"); |
| } |
| out.println(" return true;"); |
| return buffer.toString(); |
| } |
| return null; |
| } |
| |
| public String makeToStringBody() throws Exception { |
| StringWriter buffer = new StringWriter(); |
| PrintWriter out = new PrintWriter(buffer); |
| out.println(" return GetType().Name + \"[\""); |
| Iterator iter = getProperties().iterator(); |
| while (iter.hasNext()) { |
| JProperty property = (JProperty)iter.next(); |
| String name = property.getSimpleName(); |
| out.println(" + \" " + name + "=\" + " + name); |
| } |
| out.println(" + \" ]\";"); |
| return buffer.toString(); |
| } |
| |
| private void generateLicence(PrintWriter out) { |
| out.println("/*"); |
| out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more"); |
| out.println(" * contributor license agreements. See the NOTICE file distributed with"); |
| out.println(" * this work for additional information regarding copyright ownership."); |
| out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0"); |
| out.println(" * (the \"License\"); you may not use this file except in compliance with"); |
| out.println(" * the License. You may obtain a copy of the License at"); |
| out.println(" *"); |
| out.println(" * http://www.apache.org/licenses/LICENSE-2.0"); |
| out.println(" *"); |
| out.println(" * Unless required by applicable law or agreed to in writing, software"); |
| out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,"); |
| out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); |
| out.println(" * See the License for the specific language governing permissions and"); |
| out.println(" * limitations under the License."); |
| out.println(" */"); |
| } |
| |
| protected void generateFile(PrintWriter out) throws Exception { |
| generateLicence(out); |
| |
| out.println("//"); |
| out.println("// NOTE!: This file is autogenerated - do not modify!"); |
| out.println("// if you need to make a change, please see the Groovy scripts in the"); |
| out.println("// activemq-core module"); |
| out.println("//"); |
| out.println(""); |
| out.println("using System;"); |
| out.println("using System.Collections;"); |
| out.println(""); |
| out.println("using ActiveMQ.OpenWire;"); |
| out.println("using ActiveMQ.Commands;"); |
| out.println(""); |
| out.println("namespace ActiveMQ.Commands"); |
| out.println("{"); |
| out.println(" /// <summary>"); |
| out.println(" /// The ActiveMQ " + jclass.getSimpleName() + " Command"); |
| out.println(" /// </summary>"); |
| out.print(" public class " + jclass.getSimpleName() + " : " + baseClass); |
| |
| for (int i = 0; i < jclass.getInterfaces().length; i++) { |
| JClass intf = jclass.getInterfaces()[i]; |
| out.print(", " + intf.getSimpleName()); |
| } |
| |
| out.println(""); |
| out.println(" {"); |
| out.println(" public const byte ID_" + jclass.getSimpleName() + " = " + getOpenWireOpCode(jclass) + ";"); |
| out.println(" "); |
| |
| List properties = getProperties(); |
| String type; |
| Object name; |
| for (Iterator iter = properties.iterator(); iter.hasNext();) { |
| JProperty property = (JProperty)iter.next(); |
| type = toCSharpType(property.getType()); |
| name = decapitalize(property.getSimpleName()); |
| out.println(" " + type + " " + name + ";"); |
| } |
| |
| String text = makeHashCodeBody(); |
| if (text != null) { |
| out.println(""); |
| out.println(" public override int GetHashCode() {"); |
| out.println("" + text + ""); |
| out.println(" }"); |
| } |
| |
| text = makeEqualsBody(); |
| if (text != null) { |
| out.println(""); |
| out.println(" public override bool Equals(object that) {"); |
| out.println(" if (that is " + className + ") {"); |
| out.println(" return Equals((" + className + ") that);"); |
| out.println(" }"); |
| out.println(" return false;"); |
| out.println(" }"); |
| out.println(""); |
| out.println(" public virtual bool Equals(" + className + " that) {"); |
| out.println("" + text + ""); |
| out.println(" }"); |
| } |
| |
| text = makeToStringBody(); |
| if (text != null) { |
| out.println(""); |
| out.println(" public override string ToString() {"); |
| out.println("" + text + ""); |
| out.println(" }"); |
| } |
| |
| out.println(""); |
| out.println(" public override byte GetDataStructureType() {"); |
| out.println(" return ID_" + jclass.getSimpleName() + ";"); |
| out.println(" }"); |
| out.println(""); |
| out.println(""); |
| out.println(" // Properties"); |
| |
| for (Iterator iter = properties.iterator(); iter.hasNext();) { |
| JProperty property = (JProperty)iter.next(); |
| type = toCSharpType(property.getType()); |
| name = decapitalize(property.getSimpleName()); |
| String propertyName = property.getSimpleName(); |
| |
| out.println(""); |
| out.println(" public " + type + " " + propertyName + ""); |
| out.println(" {"); |
| out.println(" get { return " + name + "; }"); |
| out.println(" set { this." + name + " = value; } "); |
| out.println(" }"); |
| } |
| |
| out.println(""); |
| out.println(" }"); |
| out.println("}"); |
| } |
| |
| public String getTargetDir() { |
| return targetDir; |
| } |
| |
| public void setTargetDir(String targetDir) { |
| this.targetDir = targetDir; |
| } |
| } |