[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi/scripts GenerateMessages.py
From: |
certi-cvs |
Subject: |
[certi-cvs] certi/scripts GenerateMessages.py |
Date: |
Thu, 04 Feb 2010 08:16:13 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 10/02/04 08:16:13
Modified files:
scripts : GenerateMessages.py
Log message:
Merge-in preliminary Java generator from Andrej
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.27&r2=1.28
Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- GenerateMessages.py 2 Feb 2010 22:14:58 -0000 1.27
+++ GenerateMessages.py 4 Feb 2010 08:16:13 -0000 1.28
@@ -19,7 +19,7 @@
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA
##
-## $Id: GenerateMessages.py,v 1.27 2010/02/02 22:14:58 erk Exp $
+## $Id: GenerateMessages.py,v 1.28 2010/02/04 08:16:13 erk Exp $
## ----------------------------------------------------------------------------
"""
@@ -1697,28 +1697,255 @@
"""
This is a Java generator for C{MessageAST}.
"""
- def __init__(self,MessageAST):
- super(JavaGenerator,self).__init__(MessageAST,"//")
+ def __init__(self, MessageAST):
+ super(JavaGenerator, self).__init__(MessageAST, "//")
self.logger = logging.Logger("JavaGenerator")
self.logger.setLevel(logging.ERROR)
self.logger.addHandler(stdoutHandler)
# Message builtin type to Java type
# Note that java integer type are ALL signed:
#
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/datatypes.html
- self.builtinTypeMap = {'onoff' : 'boolean',
- 'bool' : 'boolean',
- 'string' : 'java.lang.String',
- 'byte' : 'byte',
- 'int8' : 'byte',
- 'uint8' : 'byte',
- 'int16' : 'short',
- 'uint16' : 'short',
- 'int32' : 'int',
- 'uint32' : 'int',
- 'int64' : 'long',
- 'uint64' : 'long',
- 'float' : 'float',
- 'double' : 'double',}
+ self.builtinTypeMap = {'onoff': 'boolean',
+ 'bool': 'boolean',
+ 'string': 'String',
+ 'byte': 'byte',
+ 'int8': 'byte',
+ 'uint8': 'byte',
+ 'int16': 'short',
+ 'uint16': 'short',
+ 'int32': 'int',
+ 'uint32': 'int',
+ 'int64': 'long',
+ 'uint64': 'long',
+ 'float': 'float',
+ 'double': 'double',
+ 'Tag': 'byte[]',
+ 'Extents': 'List<CertiExtent>',
+ 'SuppliedParameters': 'SuppliedParameters',
+ #'FederateHandleSet': 'FederateHandleSet',
+ 'Regions': 'List<Long>'}
+ self.serializeTypeMap = {'onoff': 'messageBuffer.write(%s);',
+ 'bool': 'messageBuffer.write(%s);',
+ 'string': 'messageBuffer.write(%s);',
+ 'byte': 'messageBuffer.write(%s);',
+ 'int8': 'messageBuffer.write(%s);',
+ 'uint8': 'messageBuffer.write(%s);',
+ 'int16': ' messageBuffer.write(%s);',
+ 'uint16': 'messageBuffer.write(%s);',
+ 'int32': 'messageBuffer.write(%s);',
+ 'uint32': 'messageBuffer.write(%s);',
+ 'int64': 'messageBuffer.write(%s);',
+ 'uint64': 'messageBuffer.write(%s);',
+ 'float': 'messageBuffer.write(%s);',
+ 'double': 'messageBuffer.write(%s);',
+ 'Tag': 'messageBuffer.writeBytesWithSize(%s);',
+ 'AttributeHandleSet': 'messageBuffer.write(%s);',
+ 'SuppliedAttributes': 'messageBuffer.write(%s);',
+ 'SuppliedParameters': 'messageBuffer.write(%s);',
+ 'FederateHandleSet': 'messageBuffer.write(%s);',
+ 'LogicalTimeInterval':'messageBuffer.write(%s);',
+ 'Extents': 'messageBuffer.write(%s);',
+ 'Regions': 'messageBuffer.writeRegions(%s);'}
+ self.deserializeTypeMap = {'onoff': '%s =
messageBuffer.readBoolean();',
+ 'bool': '%s = messageBuffer.readBoolean();',
+ 'string': '%s = messageBuffer.readString();',
+ 'byte': '%s = messageBuffer.readByte();',
+ 'int8': '%s = messageBuffer.read_int8();',
+ 'uint8': '%s = messageBuffer.read_uint8();',
+ 'int16': '%s = messageBuffer.readShort();',
+ 'uint16': '%s = messageBuffer.readShort();',
+ 'int32': '%s = messageBuffer.readInt();',
+ 'uint32': '%s = messageBuffer.readInt();',
+ 'int64': '%s = messageBuffer.readLong();',
+ 'uint64': '%s = messageBuffer.readLong();',
+ 'float': '%s = messageBuffer.readFloat();',
+ 'double': '%s = messageBuffer.readDouble();',
+ 'Tag': '%s = messageBuffer.readBytesWithSize();',
+ 'AttributeHandleSet': '%s =
messageBuffer.readAttributeHandleSet();',
+ 'SuppliedAttributes': '%s =
messageBuffer.readSuppliedAttributes();',
+ 'SuppliedParameters': '%s =
messageBuffer.readSuppliedParameters();',
+ 'FederateHandleSet': '%s = messageBuffer.readFederateHandleSet();',
+ 'LogicalTimeInterval':'%s =
messageBuffer.readLogicalTimeInterval();',
+ 'Extents': '%s = messageBuffer.readExtents();',
+ 'Regions': '%s = messageBuffer.readRegions();'}
+
+ def writeFieldStatement(self, stream, field):
+ if field.hasDefaultValue():
+ stream.write(self.getTargetTypeName(field.typeid.name) + " " +
field.name + "=" + str(field.defaultValue) + ";\n")
+ else:
+ stream.write(self.getTargetTypeName(field.typeid.name) + " " +
field.name + ";\n")
+
+ def generateIncludes(self, stream):
+ stream.write("""import certi.communication.CertiException;
+import certi.communication.MessageBuffer;
+import certi.communication.CertiMessageType;
+import certi.communication.CertiMessage;
+import certi.rti.impl.CertiAttributeHandleSet;
+import certi.rti.impl.CertiSuppliedAttributes;
+import hla.rti.AttributeHandleSet;
+import hla.rti.SuppliedAttributes;
+import certi.rti.impl.CertiExtent;
+import java.util.List;
+import hla.rti.Region;
+import hla.rti.FederateHandleSet;
+import hla.rti.SuppliedParameters;
+import certi.rti.impl.CertiLogicalTime;
+import certi.rti.impl.CertiLogicalTimeInterval;
+import hla.rti.LogicalTime;
+import hla.rti.LogicalTimeInterval;\n\n""")
+
+ def generateHeader(self, stream, factoryOnly=False):
+ for native in self.AST.natives:
+ line = native.getLanguage("Java").statement
+ # we are only interested in native "include" statement
+ stream.write("Hohohoo maaary christmass" + line + "\n")
+
+ def prepareName(self, name):
+ upperAfterScore = lambda x:__import__('re').sub(r'_(.)', lambda
y:y.group(0).upper(), x)
+ return upperAfterScore(name.lower()).replace("_", "")[1:]
+
+ def getSerializeMethodName(self, name):
+ if name in self.serializeTypeMap.keys():
+ return self.serializeTypeMap[name]
+ else:
+ representation = self.getRepresentationFor(name)
+ if representation:
+ return self.getSerializeMethodName(representation)
+ return None
+
+ def getDeSerializeMethodName(self, name):
+ if name in self.deserializeTypeMap.keys():
+ return self.deserializeTypeMap[name]
+ else:
+ representation = self.getRepresentationFor(name)
+ if representation:
+ return self.getDeSerializeMethodName(representation)
+ return None
+
+ def getRepresentationFor(self, name):
+ for native in self.AST.natives:
+ if name == native.name:
+ representation = native.getRepresentation()
+ if representation:
+ return representation
+ return None
+
+ def generateBody(self, stream, factoryOnly=False):
+ """
+ Generate the body.
+ """
+
+ for msg in self.AST.messages:
+ file = open("messages/" + self.prepareName(msg.name) + ".java",
"w")
+
+ file.write("""//
----------------------------------------------------------------------------
+// CERTI - HLA Run Time Infrastructure
+// Copyright (C) 2010 Andrej Pancik
+//
+// This program is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY ; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// ----------------------------------------------------------------------------
+""")
+
+ if self.AST.hasPackage():
+ file.write("package " + self.AST.package.name + ";\n\n")
+ self.generateIncludes(file);
+ file.write(self.getIndent() + "public class " +
self.prepareName(msg.name) + " extends CertiMessage {\n")
+ self.indent()
+
+ if len(msg.fields) > 0:
+ for field in msg.fields:
+ file.write(self.getIndent() + "private ");
+ self.writeFieldStatement(file, field)
+
+ file.write("\n")
+ #constructor
+ file.write(self.getIndent() + "public " +
self.prepareName(msg.name) + "() {\n")
+ self.indent()
+ file.write(self.getIndent() + "super(CertiMessageType." +
msg.name.upper()[2:] + ");\n")
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n");
+
+ file.write(self.getIndent() + "public " +
self.prepareName(msg.name) + "(CertiLogicalTime federationTime) {\n")
+ self.indent()
+ file.write(self.getIndent() + "super(CertiMessageType." +
msg.name.upper()[2:] + ", federationTime);\n")
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n");
+
+
+ #file.write(self.getIndent() + "public " +
self.prepareName(msg.name) + "(double federationTime, attributes) {\n")
+ #TODO attributes in constructor
+ #self.indent()
+ #file.write(self.getIndent() + "super(CertiMessageType." +
msg.name.upper()[2:] + ", federationTime);\n")
+
+ #TODO initialize local attributes
+ #self.unIndent()
+ #file.write(self.getIndent() + "}\n\n");
+
+ if len(msg.fields) > 0:
+ file.write(self.getIndent() + "@Override\n")
+ file.write(self.getIndent() + "public void
writeMessage(MessageBuffer messageBuffer) {\n")
+ self.indent()
+ file.write(self.getIndent() +
"super.writeMessage(messageBuffer); //Header\n\n");
+
+ for field in msg.fields:
+ file.write(self.getIndent() +
self.getSerializeMethodName(field.typeid.name) % field.name + "\n")
+
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n");
+
+ file.write(self.getIndent() + "@Override\n")
+ file.write(self.getIndent() + "public void
readMessage(MessageBuffer messageBuffer) throws CertiException {\n")
+ self.indent()
+ file.write(self.getIndent() +
"super.readMessage(messageBuffer); //Header \n\n");
+
+ for field in msg.fields:
+ file.write(self.getIndent() +
self.getDeSerializeMethodName(field.typeid.name) % field.name + "\n")
+
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n");
+
+ file.write(self.getIndent() + "@Override\n")
+ file.write(self.getIndent() + "public String toString() {\n")
+ self.indent()
+ file.write(self.getIndent() + "return (super.toString()");
+ for field in msg.fields:
+ file.write(" + \", " + field.name + ": \" + " + field.name)
+ file.write(");\n")
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n");
+
+ #GETTERS
+ for field in msg.fields:
+ file.write(self.getIndent() + "public " +
self.getTargetTypeName(field.typeid.name) + " get" + field.name[0].capitalize()
+ field.name[1:] + "() {\n");
+ self.indent()
+ file.write(self.getIndent() + "return " + field.name +
";\n")
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n")
+
+ #SETTERS
+ for field in msg.fields:
+ file.write(self.getIndent() + "public void set" +
field.name[0].capitalize() + field.name[1:] + "(" +
self.getTargetTypeName(field.typeid.name) + " new" + field.name[0].capitalize()
+ field.name[1:] + ") {\n");
+ self.indent()
+ file.write(self.getIndent() + "this." + field.name + " =
new" + field.name[0].capitalize() + field.name[1:] + ";\n")
+ self.unIndent()
+ file.write(self.getIndent() + "}\n\n")
+
+ file.write("}\n\n")
+ self.unIndent()
+
class PythonGenerator(CodeGenerator):
"""
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] certi/scripts GenerateMessages.py,
certi-cvs <=