in python/rpdk/java/codegen.py [0:0]
def generate(self, project):
"""Generate"""
self._namespace_from_project(project)
# clean generated files
generated_root = self._get_generated_root(project)
LOG.debug("Removing generated sources: %s", generated_root)
shutil.rmtree(generated_root, ignore_errors=True)
generated_tests_root = self._get_generated_tests_root(project)
LOG.debug("Removing generated tests: %s", generated_tests_root)
shutil.rmtree(generated_tests_root, ignore_errors=True)
# create generated sources and tests directories
src = generated_root.joinpath(*self.namespace)
LOG.debug("Making generated folder structure: %s", src)
src.mkdir(parents=True, exist_ok=True)
test_src = generated_tests_root.joinpath(*self.namespace)
LOG.debug("Making generated tests folder structure: %s", test_src)
test_src.mkdir(parents=True, exist_ok=True)
# write generated handler integration with LambdaWrapper
path = src / "HandlerWrapper.java"
LOG.debug("Writing handler wrapper: %s", path)
template = self.env.get_template("generate/HandlerWrapper.java")
contents = template.render(
package_name=self.package_name,
operations=project.schema.get("handlers", {}).keys(),
contains_type_configuration=project.configuration_schema,
pojo_name="ResourceModel",
wrapper_parent="LambdaWrapper",
)
project.overwrite(path, contents)
# write generated handler integration with ExecutableWrapper
self._write_executable_wrapper_class(src, project)
path = src / "BaseConfiguration.java"
LOG.debug("Writing base configuration: %s", path)
template = self.env.get_template("generate/BaseConfiguration.java")
contents = template.render(
package_name=self.package_name,
schema_file_name=project.schema_filename,
pojo_name="ResourceModel",
)
project.overwrite(path, contents)
path = src / "BaseHandler.java"
LOG.debug("Writing base handler: %s", path)
template = self.env.get_template("generate/BaseHandler.java")
contents = template.render(
package_name=self.package_name,
operations=OPERATIONS,
contains_type_configuration=project.configuration_schema,
pojo_name="ResourceModel",
)
project.overwrite(path, contents)
# generate POJOs
models = resolve_models(project.schema)
if project.configuration_schema:
configuration_schema_path = (
self._get_generated_root(project)
/ project.configuration_schema_filename
)
project.write_configuration_schema(configuration_schema_path)
configuration_models = resolve_models(
project.configuration_schema, "TypeConfigurationModel"
)
else:
configuration_models = {"TypeConfigurationModel": {}}
models.update(configuration_models)
LOG.debug("Writing %d POJOs", len(models))
base_template = self.env.get_template("generate/ResourceModel.java")
pojo_template = self.env.get_template("generate/POJO.java")
for model_name, properties in models.items():
path = src / "{}.java".format(model_name)
LOG.debug("%s POJO: %s", model_name, path)
if model_name == "ResourceModel":
contents = base_template.render(
type_name=project.type_name,
package_name=self.package_name,
model_name=model_name,
properties=properties,
primaryIdentifier=project.schema.get("primaryIdentifier", []),
additionalIdentifiers=project.schema.get(
"additionalIdentifiers", []
),
)
else:
contents = pojo_template.render(
package_name=self.package_name,
model_name=model_name,
properties=properties,
no_args_constructor_required=(
model_name != "TypeConfigurationModel" or len(properties) != 0
),
)
project.overwrite(path, contents)
self._update_settings(project)
LOG.debug("Generate complete")