Ejemplo n.º 1
0
def generate(model, package_path):
    entities = model.entities

    # Initialize template engine.
    jinja_env = jinja2.Environment(trim_blocks=True, lstrip_blocks=True,
                                   loader=jinja2.FileSystemLoader(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir,
                                                                                               pymajorme_config.TEMPLATES_DIR))))

    # Register filter for mapping Entity type names to Java type names.
    jinja_env.filters['javatype'] = filter_javatype
    jinja_env.filters['collectionGeneric'] = filter_collection_generic
    jinja_env.filters['collectionConcrete'] = filter_collection_concrete
    jinja_env.filters['relation_name'] = filter_relation_name
    jinja_env.filters['source'] = lambda relations, entity: [r for r in relations if entity.name == r.source.type.name]
    jinja_env.filters['destination'] = lambda relations, entity: [r for r in relations if entity.name == r.destination.type.name]
    jinja_env.filters['relation_attribute'] = filter_relation_attribute
    jinja_env.filters['capitalize'] = capitalize
    jinja_env.filters['decapitalize'] = decapitalize
    jinja_env.filters['singularize'] = singularize

    # Load Java template
    template = jinja_env.get_template(TEMPLATE_NAME)

    # Create entity directory
    package_path = os.path.join(package_path, 'entity')
    if not os.path.exists(package_path):
        os.mkdir(package_path)

    date = datetime.datetime.now().strftime('%d.%m.%Y. %H:%M:%S')

    for entity in entities:

        relations = model.relations

        # clear, initialize and resolve relation based imports
        initialize_imports()
        relation_based_imports(relations, entity)

        no_guid = True
        for attr in entity.attributes:
            if hasattr(attr, 'column_parameters'):
                for prm in attr.column_parameters:
                    if prm.name == 'GUID':
                        no_guid = False
                        break
            if not no_guid:
                break

        rendered = template.render({'entity': entity,
                                    'relations': relations,
                                    'date': date,
                                    'no_guid': no_guid,
                                    'package': package_path_for_template(package_path),
                                    'imports': imports})

        # For each entity generate java file
        with open(os.path.join(package_path, '{}.java'.format(entity.name)), 'w') as f:
            f.write(rendered)
Ejemplo n.º 2
0
def generate(model, package_path):

    entities = model.entities

    # Initialize template engine.
    jinja_env = jinja2.Environment(trim_blocks=True, lstrip_blocks=True,
        loader=jinja2.FileSystemLoader(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir,
                pymajorme_config.TEMPLATES_DIR, 'dao'))))

    # Load Dao templates
    class_template = jinja_env.get_template(CLASS_TEMPLATE_NAME)
    interface_template = jinja_env.get_template(INTERFACE_TEMPLATE_NAME)

    generic_dao_class_template = jinja_env.get_template(GENERIC_DAO_CLASS_TEMPLATE_NAME)
    generic_dao_interface_template = jinja_env.get_template(GENERIC_DAO_INTERFACE_TEMPLATE_NAME)
    em_factory_template = jinja_env.get_template(EM_FACTORY_TEMPLATE_NAME)

    date = datetime.datetime.now().strftime('%d.%m.%Y. %H:%M:%S')

    entity_package = os.path.join(package_path, 'entity')
    # Create dao directory
    package_path = os.path.join(package_path, 'dao')
    if not os.path.exists(package_path):
        os.mkdir(package_path)

    # Generic dao
    generic_dao_class_rendered = generic_dao_class_template.render({'package': package_path_for_template(package_path),
                                                                    'entity_package': package_path_for_template(entity_package),
                                                                    'context': model.context.name,
                                                                    'date': date})
    generic_dao_interface_rendered = generic_dao_interface_template.render({'package': package_path_for_template(package_path),
                                                                            'entity_package': package_path_for_template(entity_package),
                                                                            'date': date})
    em_factory_rendered = em_factory_template.render({'package': package_path_for_template(package_path),
                                                      'context': model.context.name,
                                                      'date': date})
    # generate java file
    with open(os.path.join(package_path, 'GenericDao.java'), 'w') as f:
        f.write(generic_dao_class_rendered)
    with open(os.path.join(package_path, 'IGenericDao.java'), 'w') as f:
        f.write(generic_dao_interface_rendered)
    with open(os.path.join(package_path, 'EntityManagerController.java'), 'w') as f:
        f.write(em_factory_rendered)

    id_type = ''

    for entity in entities:
        for attr in entity.attributes:
            found = False
            if hasattr(attr, 'column_parameters'):
                for prm in attr.column_parameters:
                    if prm.name == 'GUID':
                        id_type = attr.type.name
                        found = True
                        break
            if found:
                break

        class_rendered = class_template.render({'entity': entity.name,
                                                'id_type': id_type,
                                                'date': date,
                                                'package': package_path_for_template(package_path),
                                                'entity_package': package_path_for_template(entity_package)})

        interface_rendered = interface_template.render({'entity': entity.name,
                                                        'id_type': id_type,
                                                        'date': date,
                                                        'package': package_path_for_template(package_path),
                                                        'entity_package': package_path_for_template(entity_package)})

        # For each entity generate java file
        with open(os.path.join(package_path, '{}Dao.java'.format(entity.name)), 'w') as f:
            f.write(class_rendered)

        with open(os.path.join(package_path, 'I{}Dao.java'.format(entity.name)), 'w') as f:
            f.write(interface_rendered)