Пример #1
0
    def __init__(self, schema, naming):
        javatype = schema['javaType']

        if not javatype or 0 == len(javatype):
            raise Exception('missing "javaType" field')

        self._cppmodelclassname = jscom.javatypetocppname(javatype)
        self._naming = naming
Пример #2
0
    def __init__(self, schema, naming):
        javatype = schema['javaType']

        if not javatype or 0 == len(javatype):
            raise Exception('missing "javaType" field')

        self._cppmodelclassname = jscom.javatypetocppname(javatype)
        self._naming = naming
Пример #3
0
 def derivecppmodelclassname():
     if type == jscom.JSON_TYPE_OBJECT:
         javatype = schema['javaType']
         if not javatype or 0 == len(javatype):
             raise Exception('missing "javaType" field')
         return jscom.javatypetocppname(javatype)
     if type == jscom.JSON_TYPE_STRING:
         return jscom.CPP_TYPE_STRING
     raise Exception('unsupported "type" of "%s"' % type)
Пример #4
0
    def cpprootmodelclassname(self):
        if self._schemaroot['type'] != 'object':
            raise Exception('expecting object')

        javatype = self._schemaroot['javaType']

        if not javatype or 0 == len(javatype):
            raise Exception('missing "javaType" field')

        return jscom.javatypetocppname(javatype)
Пример #5
0
    def cpprootmodelclassname(self):
        if self._schemaroot['type'] != 'object':
            raise Exception('expecting object')

        javatype = self._schemaroot['javaType']

        if not javatype or 0 == len(javatype):
            raise Exception('missing "javaType" field')

        return jscom.javatypetocppname(javatype)
Пример #6
0
def writedestructorlogicforlist(outputfile, propname, propmetadata):
    dict = {
        'cppmembername': jscom.propnametocppmembername(propname),
        'cpptype': jscom.javatypetocppname(propmetadata['items']['javaType'])
    }

    outputfile.write(
        string.Template("""        int32 count = ${cppmembername}->CountItems(); 
        for (i = 0; i < count; i++)
            delete ${cppmembername}->ItemAt(i);
""").substitute(dict))
Пример #7
0
def writedestructorlogicforlist(outputfile, propname, propmetadata):
    dict = {
        'cppmembername': jscom.propnametocppmembername(propname),
        'cpptype': jscom.javatypetocppname(propmetadata['items']['javaType'])
    }

    outputfile.write(
        string.Template("""        int32 count = ${cppmembername}->CountItems(); 
        for (i = 0; i < count; i++)
            delete ${cppmembername}->ItemAt(i);
""").substitute(dict))
Пример #8
0
def writeheaderincludes(outputfile, properties):
    for propname, propmetadata in properties.items():
        jsontype = propmetadata['type']
        javatype = None

        if jsontype == 'object':
            javatype = propmetadata['javaType']

        if jsontype == 'array':
            javatype = propmetadata['items']['javaType']

        if javatype is not None:
            outputfile.write('#include "%s.h"\n' % jscom.javatypetocppname(javatype))
Пример #9
0
def writeheaderincludes(outputfile, properties):
    for propname, propmetadata in properties.items():
        jsontype = propmetadata['type']
        javatype = None

        if jsontype == 'object':
            javatype = propmetadata['javaType']

        if jsontype == 'array':
            javatype = propmetadata['items']['javaType']

        if javatype is not None:
            outputfile.write('#include "%s.h"\n' % jscom.javatypetocppname(javatype))
Пример #10
0
def writeheaderincludes(outputfile, properties):
    for propname, propmetadata in properties.items():
        jsontype = propmetadata['type']
        javatype = None

        if jsontype == jscom.JSON_TYPE_OBJECT:
            javatype = propmetadata['javaType']

        if jsontype == jscom.JSON_TYPE_ARRAY:
            javatype = propmetadata['items']['javaType']

        if javatype is not None:
            outputfile.write('#include "%s.h"\n' %
                             jscom.javatypetocppname(javatype))
Пример #11
0
def writeaccessorsheader(outputfile, propname, propmetadata):
    type = propmetadata['type']

    if type == 'array':
        writelistaccessorsheader(
            outputfile, jscom.propnametocppname(propname),
            jscom.javatypetocppname(propmetadata['items']['javaType']))
    elif jscom.propmetadatatypeisscalar(propmetadata):
        writescalaraccessorsheader(
            outputfile, jscom.propnametocppname(propname),
            jscom.propmetadatatocpptypename(propmetadata))
    else:
        writetakeownershipaccessorsheader(
            outputfile, jscom.propnametocppname(propname),
            jscom.propmetadatatocpptypename(propmetadata))
Пример #12
0
def writeaccessorsheader(outputfile, propname, propmetadata):
    type = propmetadata['type']

    if type == 'array':
        writelistaccessorsheader(outputfile,
                                 jscom.propnametocppname(propname),
                                 jscom.javatypetocppname(propmetadata['items']['javaType']))
    elif jscom.propmetadatatypeisscalar(propmetadata):
        writescalaraccessorsheader(outputfile,
                                   jscom.propnametocppname(propname),
                                   jscom.propmetadatatocpptypename(propmetadata))
    else:
        writetakeownershipaccessorsheader(outputfile,
                                          jscom.propnametocppname(propname),
                                          jscom.propmetadatatocpptypename(propmetadata))
Пример #13
0
def schematocppmodels(inputfile, schema, outputdirectory):
    if schema['type'] != 'object':
        raise Exception('expecting object')

    javatype = schema['javaType']

    if not javatype or 0 == len(javatype):
        raise Exception('missing "javaType" field')

    cppclassname = jscom.javatypetocppname(javatype)
    cpphfilename = os.path.join(outputdirectory, cppclassname + '.h')
    cppifilename = os.path.join(outputdirectory, cppclassname + '.cpp')

    with open(cpphfilename, 'w') as cpphfile:

        jscom.writetopcomment(cpphfile, os.path.split(inputfile)[1], 'Model')
        guarddefname = 'GEN_JSON_SCHEMA_MODEL__%s_H' % (cppclassname.upper())

        cpphfile.write(
            string.Template("""
#ifndef ${guarddefname}
#define ${guarddefname}

#include "List.h"
#include "String.h"

""").substitute({'guarddefname': guarddefname}))

        writeheaderincludes(cpphfile, schema['properties'])

        cpphfile.write(
            string.Template("""
class ${cppclassname} {
public:
    ${cppclassname}();
    virtual ~${cppclassname}();


""").substitute({'cppclassname': cppclassname}))

        for propname, propmetadata in schema['properties'].items():
            writeaccessorsheader(cpphfile, propname, propmetadata)
            cpphfile.write('\n')

        # Now add the instance variables for the object as well.

        cpphfile.write('private:\n')

        for propname, propmetadata in schema['properties'].items():
            cpphfile.write('    %s* %s;\n' %
                           (jscom.propmetadatatocpptypename(propmetadata),
                            jscom.propnametocppmembername(propname)))

        cpphfile.write(('};\n\n' '#endif // %s') % guarddefname)

    with open(cppifilename, 'w') as cppifile:

        jscom.writetopcomment(cppifile, os.path.split(inputfile)[1], 'Model')

        cppifile.write('#include "%s.h"\n' % cppclassname)

        writeconstructor(cppifile, cppclassname, schema)
        writedestructor(cppifile, cppclassname, schema)

        for propname, propmetadata in schema['properties'].items():
            writeaccessors(cppifile, cppclassname, propname, propmetadata)
            cppifile.write('\n')

    # Now write out any subordinate structures.

    for propname, propmetadata in schema['properties'].items():
        jsontype = propmetadata['type']

        if jsontype == 'array':
            schematocppmodels(inputfile, propmetadata['items'],
                              outputdirectory)

        if jsontype == 'object':
            schematocppmodels(inputfile, propmetadata, outputdirectory)
Пример #14
0
def schematocppmodels(inputfile, schema, outputdirectory):
    if schema['type'] != 'object':
        raise Exception('expecting object')

    javatype = schema['javaType']

    if not javatype or 0 == len(javatype):
        raise Exception('missing "javaType" field')

    cppclassname = jscom.javatypetocppname(javatype)
    cpphfilename = os.path.join(outputdirectory, cppclassname + '.h')
    cppifilename = os.path.join(outputdirectory, cppclassname + '.cpp')

    with open(cpphfilename, 'w') as cpphfile:

        jscom.writetopcomment(cpphfile, os.path.split(inputfile)[1], 'Model')
        guarddefname = 'GEN_JSON_SCHEMA_MODEL__%s_H' % (cppclassname.upper())

        cpphfile.write(string.Template("""
#ifndef ${guarddefname}
#define ${guarddefname}

#include "List.h"
#include "String.h"

""").substitute({'guarddefname': guarddefname}))

        writeheaderincludes(cpphfile, schema['properties'])

        cpphfile.write(string.Template("""
class ${cppclassname} {
public:
    ${cppclassname}();
    virtual ~${cppclassname}();


""").substitute({'cppclassname': cppclassname}))

        for propname, propmetadata in schema['properties'].items():
            writeaccessorsheader(cpphfile, propname, propmetadata)
            cpphfile.write('\n')

        # Now add the instance variables for the object as well.

        cpphfile.write('private:\n')

        for propname, propmetadata in schema['properties'].items():
            cpphfile.write('    %s* %s;\n' % (
                jscom.propmetadatatocpptypename(propmetadata),
                jscom.propnametocppmembername(propname)))

        cpphfile.write((
            '};\n\n'
            '#endif // %s'
        ) % guarddefname)

    with open(cppifilename, 'w') as cppifile:

        jscom.writetopcomment(cppifile, os.path.split(inputfile)[1], 'Model')

        cppifile.write('#include "%s.h"\n' % cppclassname)

        writeconstructor(cppifile, cppclassname, schema)
        writedestructor(cppifile, cppclassname, schema)

        for propname, propmetadata in schema['properties'].items():
            writeaccessors(cppifile, cppclassname, propname, propmetadata)
            cppifile.write('\n')

    # Now write out any subordinate structures.

    for propname, propmetadata in schema['properties'].items():
        jsontype = propmetadata['type']

        if jsontype == 'array':
            schematocppmodels(inputfile, propmetadata['items'], outputdirectory)

        if jsontype == 'object':
            schematocppmodels(inputfile, propmetadata, outputdirectory)