Skip to content

Commit

Permalink
Java to EMF EPackage converters (c.d.)
Browse files Browse the repository at this point in the history
 - Construct and add 'nsURI' to each sub-package

 - Construct and add 'nsPrefix' to each sub-package

 - Instead of creating custom EDataTypes for array types, re-use "single
instance" equivalents as type in such cases and set upperBound to
'ETypedElement.UNBOUNDED_MULTIPLICITY'

 - Reuse EDataTypes from EPackagesRegistry attached to ResourceSet

 - Use current Classloader when constructing URLClassLoader

 - When looking up EClassifier, check package name as well

 - Refactoring related to above mentioned, as well as minor fixes and
improvements

Signed-off-by: Michael H. Siemaszko <mhs@into.software>
  • Loading branch information
ideas-into-software committed Jul 7, 2024
1 parent 1117885 commit 6e9ce07
Show file tree
Hide file tree
Showing 6 changed files with 285 additions and 75 deletions.
5 changes: 0 additions & 5 deletions cnf/central.mvn
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
biz.aQute.bnd:biz.aQute.bnd.annotation:7.0.0
biz.aQute.bnd:biz.aQute.bnd.annotation:7.0.0
biz.aQute:biz.aQute.gogo.commands.provider:1.8.0
biz.aQute:biz.aQute.wrapper.hamcrest:1.9.0
biz.aQute.bnd:biz.aQute.bnd.javagen:7.0.0
Expand Down Expand Up @@ -33,10 +32,8 @@ org.apache.felix:org.apache.felix.framework:7.0.1
org.apache.felix:org.apache.felix.gogo.command:1.1.2
org.apache.felix:org.apache.felix.gogo.runtime:1.1.4
org.apache.felix:org.apache.felix.gogo.shell:1.1.4
org.apache.felix:org.apache.felix.gogo.shell:1.1.4
org.apache.felix:org.apache.felix.http.jetty:4.1.14
org.apache.felix:org.apache.felix.http.servlet-api:1.1.2
org.apache.felix:org.apache.felix.http.servlet-api:1.1.2
org.apache.felix:org.apache.felix.inventory:1.0.6
org.apache.felix:org.apache.felix.cm.json:1.0.6
org.apache.felix:org.apache.felix.log.extension:1.0.0
Expand All @@ -63,8 +60,6 @@ org.bouncycastle:bcprov-jdk15on:1.64
org.bouncycastle:bctls-jdk15on:1.64
org.bouncycastle:bcutil-jdk15on:1.69



org.opentest4j:opentest4j:1.2.0

org.osgi:org.osgi.annotation.bundle:1.1.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public void testConvertJakartaRESTfulWSAPI(
EPackage.Registry.INSTANCE.put(dynamicEPackageFromJavaReferenceTypes.getNsURI(),
dynamicEPackageFromJavaReferenceTypes);

assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(182);
assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(213);
}

@Disabled
Expand Down Expand Up @@ -143,7 +143,7 @@ public void testConvertJakartaRESTfulWSAPIAndSerializeToStaticEMF(
EPackage.Registry.INSTANCE.put(dynamicEPackageFromJavaReferenceTypes.getNsURI(),
dynamicEPackageFromJavaReferenceTypes);

assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(182);
assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(213);

Resource resource = resourceSet.createResource(URI.createFileURI("jakarta.ws.rs-api-3.1.0.ecore"));

Expand Down Expand Up @@ -188,7 +188,50 @@ public void testConvertOrgApacheFelixHttpServletApiAndSerializeToStaticEMF(
EPackage.Registry.INSTANCE.put(dynamicEPackageFromJavaReferenceTypes.getNsURI(),
dynamicEPackageFromJavaReferenceTypes);

assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(119);
assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(198);

Resource resource = resourceSet
.createResource(URI.createFileURI("org.apache.felix.http.servlet-api-2.1.0.ecore"));

resource.getContents().add(dynamicEPackageFromJavaReferenceTypes);
resource.save(null);
}

@Disabled
@Test
public void testConvertOrgApacheFelixHttpServletApiAndSerializeToStaticEMFReusingEDataTypes(
@InjectService(cardinality = 1, timeout = 4000, filter = "(component.name=JavaReferenceTypeToEPackageConverter)") ServiceAware<JavaToEPackageConverter> javaReferenceTypeToEPackageConverterAware,
@InjectService(timeout = 2000) ServiceAware<ResourceSet> rsAware) throws Exception {
assertThat(javaReferenceTypeToEPackageConverterAware.getServices()).hasSize(1);
JavaToEPackageConverter javaReferenceTypeToEPackageConverterService = javaReferenceTypeToEPackageConverterAware
.getService();
assertThat(javaReferenceTypeToEPackageConverterService).isNotNull();

assertNotNull(rsAware);
assertThat(rsAware.getServices()).hasSize(1);
ResourceSet resourceSet = rsAware.getService();
assertNotNull(resourceSet);

String nsURI = "https://geckoprojects.org/jakarta/servlet/2.1.0/";

EPackage dynamicEPackageFromJavaReferenceTypes = javaReferenceTypeToEPackageConverterService.convert(
resourceSet.getPackageRegistry(), PACKAGE_NAME, nsURI, NS_PREFIX,
Paths.get(ORG_APACHE_FELIX_HTTP_SERVLET_API));
assertNotNull(dynamicEPackageFromJavaReferenceTypes);

EAnnotation versionEAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
versionEAnnotation.setSource("Version");
versionEAnnotation.getDetails().put("value", "2.1.0");
dynamicEPackageFromJavaReferenceTypes.getEAnnotations().add(versionEAnnotation);

assertEquals(PACKAGE_NAME, dynamicEPackageFromJavaReferenceTypes.getName());
assertEquals(nsURI, dynamicEPackageFromJavaReferenceTypes.getNsURI());
assertEquals(NS_PREFIX, dynamicEPackageFromJavaReferenceTypes.getNsPrefix());

EPackage.Registry.INSTANCE.put(dynamicEPackageFromJavaReferenceTypes.getNsURI(),
dynamicEPackageFromJavaReferenceTypes);

assertThat(eClassifiersTotalCount(dynamicEPackageFromJavaReferenceTypes)).isEqualTo(198);

Resource resource = resourceSet
.createResource(URI.createFileURI("org.apache.felix.http.servlet-api-2.1.0.ecore"));
Expand Down
10 changes: 5 additions & 5 deletions org.gecko.emf.converter.tests/test.bndrun
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@
assertj-core;version='[3.24.2,3.24.3)',\
net.bytebuddy.byte-buddy;version='[1.14.9,1.14.10)',\
slf4j.api;version='[1.7.36,1.7.37)',\
slf4j.simple;version='[1.7.36,1.7.37)',\
org.apache.felix.scr;version='[2.2.6,2.2.7)',\
org.eclipse.emf.ecore.xmi;version='[2.36.0,2.36.1)',\
org.gecko.emf.converter.model;version=snapshot,\
org.gecko.emf.osgi.component.minimal;version='[6.1.1,6.1.2)',\
org.osgi.service.cm;version='[1.6.1,1.6.2)',\
org.osgi.service.component;version='[1.5.1,1.5.2)',\
org.osgi.util.promise;version='[1.3.0,1.3.1)',\
org.osgi.util.converter;version='[1.0.9,1.0.10)',\
org.apache.commons.lang3;version='[3.12.0,3.12.1)'
org.apache.commons.lang3;version='[3.12.0,3.12.1)',\
org.eclipse.emf.ecore.xmi;version='[2.36.0,2.36.1)',\
org.gecko.emf.osgi.component.minimal;version='[6.1.1,6.1.2)',\
org.osgi.service.cm;version='[1.6.1,1.6.2)',\
slf4j.simple;version='[1.7.36,1.7.37)'
Loading

0 comments on commit 6e9ce07

Please sign in to comment.