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)
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)