Skip to content

Commit 193def2

Browse files
Wenbing LiJohn Tompkins
Wenbing Li
and
John Tompkins
authored
Support protocol version 2.0.0 to callback handlers orchestrated by CloudFormation service (#279)
* Support protocol version 2.0.0 to callback handlers orchestrated by cloudformation service * Add protocol version and require java plugin version to be 2.0.0 or above Co-authored-by: John Tompkins <[email protected]>
1 parent b9cc0c8 commit 193def2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+410
-1133
lines changed

pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>software.amazon.cloudformation</groupId>
55
<artifactId>aws-cloudformation-rpdk-java-plugin</artifactId>
6-
<version>1.0.5</version>
6+
<version>2.0.0</version>
77
<name>AWS CloudFormation RPDK Java Plugin</name>
88
<description>The CloudFormation Resource Provider Development Kit (RPDK) allows you to author your own resource providers that can be used by CloudFormation. This plugin library helps to provide runtime bindings for the execution of your providers by CloudFormation.
99
</description>
@@ -307,12 +307,12 @@
307307
<limit>
308308
<counter>BRANCH</counter>
309309
<value>COVEREDRATIO</value>
310-
<minimum>0.80</minimum>
310+
<minimum>0.79</minimum>
311311
</limit>
312312
<limit>
313313
<counter>INSTRUCTION</counter>
314314
<value>COVEREDRATIO</value>
315-
<minimum>0.87</minimum>
315+
<minimum>0.89</minimum>
316316
</limit>
317317
</limits>
318318
</rule>

python/rpdk/java/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
22

3-
__version__ = "0.1.6"
3+
__version__ = "2.0.0"
44

55
logging.getLogger(__name__).addHandler(logging.NullHandler())

python/rpdk/java/codegen.py

+61-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
# pylint doesn't recognize abstract methods
33
import logging
44
import shutil
5+
import xml.etree.ElementTree as ET # nosec
56
from collections import namedtuple
7+
from xml.etree.ElementTree import ParseError # nosec
68

79
from rpdk.core.data_loaders import resource_stream
810
from rpdk.core.exceptions import InternalError, SysExitRecommendedError
@@ -37,10 +39,29 @@ def wrapper(*args, **kwargs):
3739
return wrapper
3840

3941

42+
DEFAULT_PROTOCOL_VERSION = "2.0.0"
43+
PROTOCOL_VERSION_SETTING = "protocolVersion"
44+
DEFAULT_SETTINGS = {PROTOCOL_VERSION_SETTING: DEFAULT_PROTOCOL_VERSION}
45+
46+
MINIMUM_JAVA_DEPENDENCY_VERSION = "2.0.0"
47+
48+
4049
class JavaArchiveNotFoundError(SysExitRecommendedError):
4150
pass
4251

4352

53+
class JavaPluginVersionNotSupportedError(SysExitRecommendedError):
54+
pass
55+
56+
57+
class JavaPluginNotFoundError(SysExitRecommendedError):
58+
pass
59+
60+
61+
class InvalidMavenPOMError(SysExitRecommendedError):
62+
pass
63+
64+
4465
class JavaLanguagePlugin(LanguagePlugin):
4566
MODULE_NAME = __name__
4667
RUNTIME = "java8"
@@ -66,7 +87,7 @@ def _namespace_from_project(self, project):
6687
fallback = ("com",) + project.type_info
6788
namespace = tuple(safe_reserved(s.lower()) for s in fallback)
6889
self.namespace = project.settings["namespace"] = namespace
69-
project._write_settings("java") # pylint: disable=protected-access
90+
project.write_settings()
7091

7192
self.package_name = ".".join(self.namespace)
7293

@@ -283,6 +304,7 @@ def _init_settings(self, project):
283304
project.runtime = self.RUNTIME
284305
project.entrypoint = self.ENTRY_POINT.format(self.package_name)
285306
project.test_entrypoint = self.TEST_ENTRY_POINT.format(self.package_name)
307+
project.settings.update(DEFAULT_SETTINGS)
286308

287309
@staticmethod
288310
def _get_generated_root(project):
@@ -377,6 +399,24 @@ def generate(self, project):
377399
)
378400
project.overwrite(path, contents)
379401

402+
# Update settings
403+
java_plugin_dependency_version = self._get_java_plugin_dependency_version(
404+
project
405+
)
406+
if java_plugin_dependency_version < MINIMUM_JAVA_DEPENDENCY_VERSION:
407+
raise JavaPluginVersionNotSupportedError(
408+
"'aws-cloudformation-rpdk-java-plugin' {} is no longer supported."
409+
"Please update it in pom.xml to version {} or above.".format(
410+
java_plugin_dependency_version, MINIMUM_JAVA_DEPENDENCY_VERSION
411+
)
412+
)
413+
protocol_version = project.settings.get(PROTOCOL_VERSION_SETTING)
414+
if protocol_version != DEFAULT_PROTOCOL_VERSION:
415+
project.settings[PROTOCOL_VERSION_SETTING] = DEFAULT_PROTOCOL_VERSION
416+
project.write_settings()
417+
418+
LOG.debug("Generate complete")
419+
380420
@staticmethod
381421
def _find_jar(project):
382422
jar_glob = list(
@@ -399,6 +439,26 @@ def _find_jar(project):
399439

400440
return jar_glob[0]
401441

442+
@staticmethod
443+
def _get_java_plugin_dependency_version(project):
444+
try:
445+
tree = ET.parse(project.root / "pom.xml")
446+
root = tree.getroot()
447+
namespace = {"mvn": "http://maven.apache.org/POM/4.0.0"}
448+
plugin_dependency_version = root.find(
449+
"./mvn:dependencies/mvn:dependency"
450+
"/[mvn:artifactId='aws-cloudformation-rpdk-java-plugin']/mvn:version",
451+
namespace,
452+
)
453+
if plugin_dependency_version is None:
454+
raise JavaPluginNotFoundError(
455+
"'aws-cloudformation-rpdk-java-plugin' maven dependency "
456+
"not found in pom.xml."
457+
)
458+
return plugin_dependency_version.text
459+
except ParseError:
460+
raise InvalidMavenPOMError("pom.xml is invalid.")
461+
402462
@logdebug
403463
def package(self, project, zip_file):
404464
"""Packaging Java project"""

python/rpdk/java/templates/init/shared/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<dependency>
2424
<groupId>software.amazon.cloudformation</groupId>
2525
<artifactId>aws-cloudformation-rpdk-java-plugin</artifactId>
26-
<version>1.0.5</version>
26+
<version>2.0.0</version>
2727
</dependency>
2828
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
2929
<dependency>

0 commit comments

Comments
 (0)