Skip to content

Commit 343dfb6

Browse files
committed
Specify model namespace definition
1 parent fb75779 commit 343dfb6

File tree

4 files changed

+69
-10
lines changed

4 files changed

+69
-10
lines changed

core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AspectModelLoader.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
import static java.util.stream.Collectors.toSet;
1717

1818
import java.io.File;
19+
import java.io.FileNotFoundException;
20+
import java.io.IOException;
1921
import java.io.InputStream;
2022
import java.nio.file.Path;
2123
import java.util.ArrayDeque;
2224
import java.util.ArrayList;
2325
import java.util.Collection;
2426
import java.util.Deque;
27+
import java.util.Enumeration;
2528
import java.util.HashSet;
2629
import java.util.List;
2730
import java.util.Map;
@@ -30,6 +33,8 @@
3033
import java.util.function.Function;
3134
import java.util.function.Supplier;
3235
import java.util.stream.Stream;
36+
import java.util.zip.ZipEntry;
37+
import java.util.zip.ZipFile;
3338

3439
import org.eclipse.esmf.aspectmodel.AspectModelFile;
3540
import org.eclipse.esmf.aspectmodel.resolver.AspectModelFileLoader;
@@ -173,6 +178,38 @@ public AspectModel load( final InputStream inputStream ) {
173178
return buildAspectModel( loaderContext.loadedFiles() );
174179
}
175180

181+
public AspectModel loadFromArchive( final String pathToArchive ) {
182+
File zipFile = new File( pathToArchive );
183+
184+
if (!zipFile.exists() || !zipFile.isFile()) {
185+
throw new RuntimeException(new FileNotFoundException("The specified file does not exist or is not a file."));
186+
}
187+
188+
List<AspectModelFile> aspectModelFiles = new ArrayList<>();
189+
190+
try ( ZipFile zip = new ZipFile( zipFile ) ) {
191+
Enumeration<? extends ZipEntry> entries = zip.entries();
192+
193+
while ( entries.hasMoreElements() ) {
194+
ZipEntry entry = entries.nextElement();
195+
System.out.println( entry.getName() ); // Consider removing or modifying this debug statement in production.
196+
197+
if ( entry.getName().endsWith( ".ttl" ) ) {
198+
try ( InputStream inputStream = zip.getInputStream( entry ) ) {
199+
AspectModelFile aspectModelFile = AspectModelFileLoader.load( inputStream );
200+
aspectModelFiles.add( aspectModelFile );
201+
} catch ( IOException e ) {
202+
System.err.println( "Error reading entry: " + entry.getName() + " - " + e.getMessage() );
203+
}
204+
}
205+
}
206+
} catch ( IOException e ) {
207+
System.err.println( "Error reading the ZIP file: " + e.getMessage() );
208+
}
209+
210+
return buildAspectModel( aspectModelFiles );
211+
}
212+
176213
private AspectModelFile migrate( final AspectModelFile file ) {
177214
return MetaModelVersionMigrator.INSTANCE.apply( file );
178215
}

core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/impl/DefaultNamespace.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public DefaultNamespace( final String packagePart, final VersionNumber versionNu
4444
* @param elements the list of elements in the namspace
4545
*/
4646
public DefaultNamespace( final String uri, final List<ModelElement> elements, final Optional<AspectModelFile> source ) {
47-
this( uri.split( ":" )[2], VersionNumber.parse( uri.split( ":" )[3] ), elements, source );
47+
this( uri.split( ":" )[2], VersionNumber.parse( uri.split( ":" )[3].replace( "#", "" ) ), elements, source );
4848
}
4949

5050
// /**

core/esmf-aspect-meta-model-java/src/test/java/org/eclipse/esmf/aspectmodel/loader/AspectModelLoaderTest.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717

18+
import java.net.URISyntaxException;
19+
import java.nio.file.Path;
20+
import java.nio.file.Paths;
21+
import java.util.List;
1822
import java.util.Map;
1923
import java.util.Optional;
2024
import java.util.function.Function;
2125
import java.util.stream.Collectors;
2226

2327
import org.eclipse.esmf.metamodel.AbstractEntity;
28+
import org.eclipse.esmf.metamodel.AspectModel;
2429
import org.eclipse.esmf.metamodel.ComplexType;
2530
import org.eclipse.esmf.test.TestAspect;
2631
import org.eclipse.esmf.test.TestResources;
@@ -30,17 +35,34 @@
3035
class AspectModelLoaderTest {
3136
@Test
3237
public void testOfAbstractEntityCyclomaticCreation() {
33-
final Map<String, ComplexType> entities =
34-
TestResources.load( TestAspect.ASPECT_WITH_MULTIPLE_ENTITIES_SAME_EXTEND ).elements().stream()
35-
.filter( ComplexType.class::isInstance )
36-
.map( ComplexType.class::cast )
37-
.collect( Collectors.toMap( ComplexType::getName, Function.identity() ) );
38+
final Map<String, ComplexType> entities = TestResources.load( TestAspect.ASPECT_WITH_MULTIPLE_ENTITIES_SAME_EXTEND ).elements()
39+
.stream().filter( ComplexType.class::isInstance ).map( ComplexType.class::cast )
40+
.collect( Collectors.toMap( ComplexType::getName, Function.identity() ) );
3841

3942
assertThat( entities ).extracting( "AbstractTestEntity" ).isInstanceOf( AbstractEntity.class );
4043
final AbstractEntity abstractEntity = (AbstractEntity) entities.get( "AbstractTestEntity" );
41-
assertThat( entities ).extracting( "testEntityOne" ).isInstanceOfSatisfying( ComplexType.class, type ->
42-
assertThat( type ).extracting( ComplexType::getExtends ).extracting( Optional::get ).isSameAs( abstractEntity ) );
43-
assertThat( entities ).extracting( "testEntityTwo" ).isInstanceOfSatisfying( ComplexType.class, type ->
44-
assertThat( type ).extracting( ComplexType::getExtends ).extracting( Optional::get ).isSameAs( abstractEntity ) );
44+
assertThat( entities ).extracting( "testEntityOne" ).isInstanceOfSatisfying( ComplexType.class,
45+
type -> assertThat( type ).extracting( ComplexType::getExtends ).extracting( Optional::get ).isSameAs( abstractEntity ) );
46+
assertThat( entities ).extracting( "testEntityTwo" ).isInstanceOfSatisfying( ComplexType.class,
47+
type -> assertThat( type ).extracting( ComplexType::getExtends ).extracting( Optional::get ).isSameAs( abstractEntity ) );
48+
}
49+
50+
@Test
51+
public void testLoadAspectModelFromZipArchive() throws URISyntaxException {
52+
final ClassLoader classLoader = getClass().getClassLoader();
53+
final Path archivePath = Paths.get( classLoader.getResource( "namespaces.zip" ).toURI() );
54+
final AspectModel aspectModel = new AspectModelLoader().loadFromArchive( archivePath.toString() );
55+
56+
assertThat( aspectModel.namespaces() ).hasSize( 2 );
57+
assertThat( aspectModel.namespaces().get( 0 ).getName() ).contains( "urn:samm:org.eclipse.examples:1.1.0" );
58+
assertThat( aspectModel.namespaces().get( 1 ).getName() ).contains( "urn:samm:org.eclipse.examples:1.0.0" );
59+
60+
final List<String> aspectsNames = List.of( "Movement2", "Movement3", "Movement", "SimpleAspect" );
61+
62+
assertThat( aspectModel.files() ).hasSize( 4 );
63+
assertThat( aspectModel.files() )
64+
.anySatisfy( aspectModelFile -> {
65+
assertThat( aspectsNames ).contains( aspectModelFile.aspect().getName() );
66+
} );
4567
}
4668
}
4.67 KB
Binary file not shown.

0 commit comments

Comments
 (0)