diff --git a/core/esmf-aspect-meta-model-interface/pom.xml b/core/esmf-aspect-meta-model-interface/pom.xml
index c9c86f855..9bf86321c 100644
--- a/core/esmf-aspect-meta-model-interface/pom.xml
+++ b/core/esmf-aspect-meta-model-interface/pom.xml
@@ -44,6 +44,14 @@
org.eclipse.esmf
esmf-semantic-aspect-meta-model
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+ org.projectlombok
+ lombok
+
org.junit.jupiter
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AspectLoadingException.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectLoadingException.java
similarity index 88%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AspectLoadingException.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectLoadingException.java
index f95b75273..c4b8c7956 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AspectLoadingException.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectLoadingException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.aspectmodel;
public class AspectLoadingException extends RuntimeException {
private static final long serialVersionUID = 7687644022103150329L;
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectModelFile.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectModelFile.java
new file mode 100644
index 000000000..ddf41147b
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/AspectModelFile.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.aspectmodel;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.esmf.metamodel.ModelElement;
+import org.eclipse.esmf.metamodel.ModelElementGroup;
+
+import org.apache.jena.rdf.model.Model;
+
+public interface AspectModelFile extends ModelElementGroup {
+ Model sourceModel();
+
+ default List headerComment() {
+ return List.of();
+ }
+
+ Optional sourceLocation();
+
+ @Override
+ default List elements() {
+ throw new UnsupportedOperationException( "Uninitialized Aspect Model" );
+ }
+
+ // boolean isAutoMigrated();
+}
\ No newline at end of file
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectMetaModelResourceResolver.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectMetaModelResourceResolver.java
deleted file mode 100644
index ceea0cc3c..000000000
--- a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectMetaModelResourceResolver.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.aspectmodel.resolver;
-
-import java.util.Set;
-import java.util.stream.Stream;
-
-import org.eclipse.esmf.aspectmodel.MissingMetaModelVersionException;
-import org.eclipse.esmf.aspectmodel.MultipleMetaModelVersionsException;
-import org.eclipse.esmf.aspectmodel.UnsupportedVersionException;
-import org.eclipse.esmf.aspectmodel.VersionNumber;
-import org.eclipse.esmf.aspectmodel.resolver.services.VersionedModel;
-import org.eclipse.esmf.samm.KnownVersion;
-
-import io.vavr.control.Try;
-import org.apache.jena.rdf.model.Model;
-import org.apache.jena.rdf.model.Statement;
-
-/**
- * Provides functionality to resolve Aspect Meta Model resources which reside in the classpath.
- */
-public interface AspectMetaModelResourceResolver {
-
- /**
- * Returns the {@link VersionedModel} for a loaded raw Aspect model that includes the given rawModeland
- * the model which is the rawModel merged with the corresponding meta model
- *
- * @param rawModel The given raw Aspect model
- * @param version The meta model version the model corresponds to
- * @return the VersionedModel containing the model, meta model version and raw model
- */
- Try mergeMetaModelIntoRawModel( final Model rawModel, final VersionNumber version );
-
- default Try mergeMetaModelIntoRawModel( final Model rawModel, final KnownVersion version ) {
- return mergeMetaModelIntoRawModel( rawModel, VersionNumber.parse( version.toVersionString() ) );
- }
-
- /**
- * Retrieves the meta model version an Aspect model uses
- *
- * @param model The RDF model containing an Aspect Model
- * @return A {@link Try.Success} with the used meta model version, or a {@link Try.Failure} with one of
- * {@link MissingMetaModelVersionException}, {@link MultipleMetaModelVersionsException} or {@link UnsupportedVersionException} (if the
- * version can not be parsed).
- */
- default Try getMetaModelVersion( final Model model ) {
- final Set metaModelVersionsUsedInModel = getUsedMetaModelVersions( model );
-
- if ( metaModelVersionsUsedInModel.isEmpty() ) {
- return Try.failure( new MissingMetaModelVersionException() );
- }
-
- if ( metaModelVersionsUsedInModel.size() > 1 ) {
- return Try.failure( new MultipleMetaModelVersionsException() );
- }
- return Try.success( metaModelVersionsUsedInModel.iterator().next() );
- }
-
- /**
- * Provides the Aspect statements based on the specific meta model version
- *
- * @param sourceModel the source model
- * @param target the target model
- * @return stream of statements
- */
- Stream listAspectStatements( Model sourceModel, Model target );
-
- /**
- * Retrieves the set of meta model versions used in a model
- *
- * @param model the model
- * @return the set of meta model versions
- */
- Set getUsedMetaModelVersions( final Model model );
-}
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/VersionedModel.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/VersionedModel.java
deleted file mode 100644
index e899674bf..000000000
--- a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/VersionedModel.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.aspectmodel.resolver.services;
-
-import org.eclipse.esmf.aspectmodel.VersionNumber;
-import org.eclipse.esmf.samm.KnownVersion;
-
-import org.apache.jena.rdf.model.Model;
-
-/**
- * Encapsulates an Aspect Model (as RDF model) and the Meta Model version it uses
- */
-public class VersionedModel {
- /**
- * The model including its corresponding meta model
- */
- private final Model model;
-
- /**
- * The model without its corresponding meta model
- */
- private final Model rawModel;
-
- /**
- * The meta model version the model refers to
- */
- private final VersionNumber version;
-
- public VersionedModel( final Model model, final VersionNumber version, final Model rawModel ) {
- this.model = model;
- this.version = version;
- this.rawModel = rawModel;
- }
-
- public VersionedModel( final Model model, final KnownVersion version, final Model rawModel ) {
- this( model, VersionNumber.parse( version.toVersionString() ), rawModel );
- }
-
- public Model getModel() {
- return model;
- }
-
- public VersionNumber getMetaModelVersion() {
- return version;
- }
-
- public Model getRawModel() {
- return rawModel;
- }
-}
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/Migrator.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/Migrator.java
similarity index 84%
rename from core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/Migrator.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/Migrator.java
index bdbc745e3..320da4623 100644
--- a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/Migrator.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/Migrator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.versionupdate.migrator;
+package org.eclipse.esmf.aspectmodel.versionupdate;
import java.util.Optional;
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/MigratorFactory.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/MigratorFactory.java
deleted file mode 100644
index 6d21e0959..000000000
--- a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/MigratorFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-package org.eclipse.esmf.aspectmodel.versionupdate;
-
-import java.util.List;
-
-import org.eclipse.esmf.aspectmodel.VersionNumber;
-import org.eclipse.esmf.aspectmodel.resolver.AspectMetaModelResourceResolver;
-import org.eclipse.esmf.aspectmodel.versionupdate.migrator.Migrator;
-
-public interface MigratorFactory {
-
- VersionNumber getLatestVersion();
-
- List createMigrators();
-
- AspectMetaModelResourceResolver createAspectMetaModelResourceResolver();
-}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/visitor/AspectVisitor.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/visitor/AspectVisitor.java
similarity index 87%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/visitor/AspectVisitor.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/visitor/AspectVisitor.java
index 1fa3048fb..58c26ad6e 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/visitor/AspectVisitor.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/aspectmodel/visitor/AspectVisitor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -10,30 +10,8 @@
*
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.visitor;
-
-import org.eclipse.esmf.characteristic.Code;
-import org.eclipse.esmf.characteristic.Collection;
-import org.eclipse.esmf.characteristic.Duration;
-import org.eclipse.esmf.characteristic.Either;
-import org.eclipse.esmf.characteristic.Enumeration;
-import org.eclipse.esmf.characteristic.List;
-import org.eclipse.esmf.characteristic.Measurement;
-import org.eclipse.esmf.characteristic.Quantifiable;
-import org.eclipse.esmf.characteristic.Set;
-import org.eclipse.esmf.characteristic.SingleEntity;
-import org.eclipse.esmf.characteristic.SortedSet;
-import org.eclipse.esmf.characteristic.State;
-import org.eclipse.esmf.characteristic.StructuredValue;
-import org.eclipse.esmf.characteristic.TimeSeries;
-import org.eclipse.esmf.characteristic.Trait;
-import org.eclipse.esmf.constraint.EncodingConstraint;
-import org.eclipse.esmf.constraint.FixedPointConstraint;
-import org.eclipse.esmf.constraint.LanguageConstraint;
-import org.eclipse.esmf.constraint.LengthConstraint;
-import org.eclipse.esmf.constraint.LocaleConstraint;
-import org.eclipse.esmf.constraint.RangeConstraint;
-import org.eclipse.esmf.constraint.RegularExpressionConstraint;
+package org.eclipse.esmf.aspectmodel.visitor;
+
import org.eclipse.esmf.metamodel.AbstractEntity;
import org.eclipse.esmf.metamodel.Aspect;
import org.eclipse.esmf.metamodel.Characteristic;
@@ -54,6 +32,28 @@
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Unit;
import org.eclipse.esmf.metamodel.Value;
+import org.eclipse.esmf.metamodel.characteristic.Code;
+import org.eclipse.esmf.metamodel.characteristic.Collection;
+import org.eclipse.esmf.metamodel.characteristic.Duration;
+import org.eclipse.esmf.metamodel.characteristic.Either;
+import org.eclipse.esmf.metamodel.characteristic.Enumeration;
+import org.eclipse.esmf.metamodel.characteristic.List;
+import org.eclipse.esmf.metamodel.characteristic.Measurement;
+import org.eclipse.esmf.metamodel.characteristic.Quantifiable;
+import org.eclipse.esmf.metamodel.characteristic.Set;
+import org.eclipse.esmf.metamodel.characteristic.SingleEntity;
+import org.eclipse.esmf.metamodel.characteristic.SortedSet;
+import org.eclipse.esmf.metamodel.characteristic.State;
+import org.eclipse.esmf.metamodel.characteristic.StructuredValue;
+import org.eclipse.esmf.metamodel.characteristic.TimeSeries;
+import org.eclipse.esmf.metamodel.characteristic.Trait;
+import org.eclipse.esmf.metamodel.constraint.EncodingConstraint;
+import org.eclipse.esmf.metamodel.constraint.FixedPointConstraint;
+import org.eclipse.esmf.metamodel.constraint.LanguageConstraint;
+import org.eclipse.esmf.metamodel.constraint.LengthConstraint;
+import org.eclipse.esmf.metamodel.constraint.LocaleConstraint;
+import org.eclipse.esmf.metamodel.constraint.RangeConstraint;
+import org.eclipse.esmf.metamodel.constraint.RegularExpressionConstraint;
/**
* Visitor interface for the traversal of Aspect Meta Model instances
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/AbstractEntity.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/AbstractEntity.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/AbstractEntity.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/AbstractEntity.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Aspect.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Aspect.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Aspect.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Aspect.java
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/AspectModel.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/AspectModel.java
new file mode 100644
index 000000000..21f3769c1
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/AspectModel.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.metamodel;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
+import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
+
+import org.apache.jena.rdf.model.Model;
+
+/**
+ * The core interface that represents an Aspect Model. It contains the underlying RDF model, the list of model elements
+ * (as instances of {@link ModelElement} and provides information about the {@link Namespace}s and the source files
+ * ({@link AspectModelFile}) that make up the model.
+ */
+public interface AspectModel extends ModelElementGroup {
+ /**
+ * The merged RDF graph of the all AspectModelFiles of this AspectModel.
+ *
+ * @return the merged RDF graph
+ */
+ Model mergedModel();
+
+ /**
+ * The namespaces that make up this AspectModel.
+ *
+ * @return the list of namespaces
+ */
+ List namespaces();
+
+ /**
+ * The list of files this AspectModel consists of.
+ *
+ * @return the list of files
+ */
+ default List files() {
+ return elements().stream()
+ .flatMap( element -> Optional.ofNullable( element.getSourceFile() ).stream() )
+ .collect( Collectors.toSet() )
+ .stream().toList();
+ }
+
+ /**
+ * Retrieves a given Model Element by URN.
+ *
+ * @param urn the model element URN
+ * @return the model element
+ * @throws NoSuchElementException if no element exists with this URN
+ */
+ default ModelElement getElementByUrn( final AspectModelUrn urn ) {
+ return elements().stream()
+ .filter( element -> urn.equals( element.urn() ) )
+ .findFirst()
+ .orElseThrow( NoSuchElementException::new );
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/impl/BoundDefinition.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/BoundDefinition.java
similarity index 95%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/impl/BoundDefinition.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/BoundDefinition.java
index 5ea122333..05c3429d7 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/impl/BoundDefinition.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/BoundDefinition.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,12 +11,12 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.impl;
+package org.eclipse.esmf.metamodel;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMMC;
+import org.eclipse.esmf.metamodel.vocabulary.SAMMC;
/**
* Defines the possible values for the {@link SAMMC#lowerBoundDefinition()} and {@link SAMMC#upperBoundDefinition()}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java
similarity index 83%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java
index f759b3fdf..f044626e1 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Characteristic.java
@@ -20,10 +20,10 @@
*
* @since SAMM 1.0.0
*/
-public interface Characteristic extends NamedElement {
+public interface Characteristic extends ModelElement {
/**
- * The data type of the {@link Property} described by this {@link Characteristic}.
+ * The data type of the {@link Property} described by this Characteristic.
*
* @return the {@link Type}
*/
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/CollectionValue.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/CollectionValue.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/CollectionValue.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/CollectionValue.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java
similarity index 97%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java
index 0ffb0dafd..1ad3694f5 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ComplexType.java
@@ -49,7 +49,7 @@ default List getAllProperties() {
@Override
default String getUrn() {
- return getAspectModelUrn().get().toString();
+ return urn().toString();
}
/**
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Constraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Constraint.java
similarity index 91%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Constraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Constraint.java
index 4cedd6d3a..8b964cc5b 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Constraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Constraint.java
@@ -18,5 +18,5 @@
*
* @since SAMM 1.0.0
*/
-public interface Constraint extends NamedElement {
+public interface Constraint extends ModelElement {
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Entity.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Entity.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Entity.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Entity.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java
similarity index 90%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java
index e2738ac0d..28d1fab19 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/EntityInstance.java
@@ -15,7 +15,7 @@
import java.util.Map;
-public interface EntityInstance extends NamedElement, Value {
+public interface EntityInstance extends ModelElement, Value {
Map getAssertions();
default Entity getEntityType() {
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Event.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Event.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Event.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Event.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/NamedElement.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/HasDescription.java
similarity index 75%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/NamedElement.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/HasDescription.java
index 4da5ea2b6..1d5f95467 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/NamedElement.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/HasDescription.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -16,35 +16,13 @@
import java.util.Collections;
import java.util.List;
import java.util.Locale;
-import java.util.Optional;
import java.util.Set;
-import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
-import org.eclipse.esmf.metamodel.datatypes.LangString;
+import org.eclipse.esmf.metamodel.datatype.LangString;
-/**
- * Represents model elements that have human-readable names and descriptions
- */
-public interface NamedElement extends ModelElement {
- /**
- * @return the URN which identifies an Aspect Model element.
- */
- Optional getAspectModelUrn();
-
- /**
- * @return the name of the Aspect Model element.
- */
+public interface HasDescription {
String getName();
- /**
- * Determines whether this model element has a generated name
- *
- * @return true if the name is synthetic (generated at load time), false if it is given in the model
- */
- default boolean hasSyntheticName() {
- return false;
- }
-
/**
* @return a {@link java.util.List} of links to an external taxonomy/ontology.
*/
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/HasProperties.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/HasProperties.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/HasProperties.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/HasProperties.java
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElement.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElement.java
new file mode 100644
index 000000000..6674340ad
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElement.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.metamodel;
+
+import static java.lang.System.identityHashCode;
+import static org.eclipse.esmf.metamodel.Namespace.ANONYMOUS;
+
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
+import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
+import org.eclipse.esmf.aspectmodel.visitor.AspectVisitor;
+import org.eclipse.esmf.samm.KnownVersion;
+
+/**
+ * The ModelElement interface provides all facilities that all Aspect Model elements have.
+ */
+public interface ModelElement extends HasDescription {
+ /**
+ * Returns the URN identifiying this element. If {@link #isAnonymous()} is true, the returned URN is synthetic. In this case, the URN can
+ * be used to identify the object, but it may not be used for display purposes.
+ *
+ * @return the element's URN or an anonymous URN
+ */
+ default AspectModelUrn urn() {
+ return AspectModelUrn.fromUrn( ANONYMOUS + "x%08X".formatted( identityHashCode( this ) ) );
+ }
+
+ @Override
+ default String getName() {
+ return urn().getName();
+ }
+
+ AspectModelFile getSourceFile();
+
+ /**
+ * Determines whether the model element is identified by a proper Aspect Model URN.
+ *
+ * @return true of the element is considered anonymous, otherwise it has a global identifying URN
+ */
+ default boolean isAnonymous() {
+ return true;
+ }
+
+ T accept( AspectVisitor visitor, C context );
+
+ default boolean is( final Class clazz ) {
+ return clazz.isAssignableFrom( getClass() );
+ }
+
+ default T as( final Class clazz ) {
+ return clazz.cast( this );
+ }
+}
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElementGroup.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElementGroup.java
new file mode 100644
index 000000000..51cceea5e
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ModelElementGroup.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.metamodel;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Represents a collection of {@link ModelElement}s.
+ */
+public interface ModelElementGroup {
+ List elements();
+
+ /**
+ * Convenience method to get the Aspects in this model element group.
+ *
+ * @return the list of aspects
+ */
+ default List aspects() {
+ return elements().stream()
+ .filter( element -> element.is( Aspect.class ) )
+ .map( element -> element.as( Aspect.class ) )
+ .toList();
+ }
+
+ /**
+ * Convenience method to get the single (first) {@link Aspect} of this model element group.
+ *
+ * @return the first (single) aspect.
+ * @throws NoSuchElementException if there are no aspects
+ */
+ default Aspect aspect() {
+ final List aspects = aspects();
+ if ( aspects.isEmpty() ) {
+ throw new NoSuchElementException();
+ }
+ return aspects().get( 0 );
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ModelNamespace.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Namespace.java
similarity index 72%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ModelNamespace.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Namespace.java
index e7d0d18df..9339783da 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ModelNamespace.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Namespace.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -13,14 +13,20 @@
package org.eclipse.esmf.metamodel;
-import java.util.List;
+import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
import org.eclipse.esmf.aspectmodel.VersionNumber;
/**
* Represents the namespace the model elements are contained in
*/
-public interface ModelNamespace {
+public interface Namespace extends ModelElementGroup, HasDescription {
+ /**
+ * The pseudo namespace URN part that contains anonymously defined model elements
+ */
+ String ANONYMOUS = "urn:samm:anonymous.elements:0.0.0#";
+
/**
* The package part of the model namespace is an identifier given in
* reverse domain name notation, e.g., com.example.myapp.
@@ -37,23 +43,11 @@ public interface ModelNamespace {
VersionNumber version();
/**
- * The model elements contained in this namespace
- *
- * @return the model elements
- */
- List elements();
-
- /**
- * Convenience method to get the Aspects in this namespace
+ * The AspectModelFile that contains a namespace element definition for this namespace.
*
- * @return the list of aspects
+ * @return the source file
*/
- default List aspects() {
- return elements().stream()
- .filter( element -> element.is( Aspect.class ) )
- .map( element -> element.as( Aspect.class ) )
- .toList();
- }
+ Optional source();
/**
* The identifier of the namespace, e.g. urn:samm:com.example.myapp:1.2.3
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Operation.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Operation.java
similarity index 95%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Operation.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Operation.java
index ef98b21a7..49296c935 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Operation.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Operation.java
@@ -22,7 +22,7 @@
*
* @since SAMM 1.0.0
*/
-public interface Operation extends NamedElement {
+public interface Operation extends ModelElement {
/**
* @return a {@link List} of {@link Property}(ies) which define the input parameters for the Operation.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Property.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Property.java
similarity index 94%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Property.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Property.java
index 06bbbf7d5..f810cc432 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Property.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Property.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -15,7 +15,7 @@
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Trait;
+import org.eclipse.esmf.metamodel.characteristic.Trait;
/**
* A Property has a name that is unique to its use in an Aspect or an Entity, and a Characteristic (i.e., the
@@ -23,7 +23,7 @@
*
* @since SAMM 1.0.0
*/
-public interface Property extends NamedElement {
+public interface Property extends ModelElement {
/**
* @return the {@link Characteristic} describing this Property. This can be empty when the Property is abstract.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java
similarity index 92%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java
index 1a0c84db5..161f7de22 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/QuantityKind.java
@@ -18,7 +18,7 @@
*
* @since SAMM 1.0.0
*/
-public interface QuantityKind extends NamedElement {
+public interface QuantityKind extends ModelElement {
/**
* Returns the quantity kind's human-readable name
*/
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Scalar.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Scalar.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Scalar.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Scalar.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ScalarValue.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ScalarValue.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/ScalarValue.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/ScalarValue.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java
similarity index 92%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java
index 749082639..44bdc0672 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/StructureElement.java
@@ -16,7 +16,7 @@
/**
* Represents structural model elements, i.e. that are named and have {@link Property}s
*/
-public interface StructureElement extends NamedElement, HasProperties {
+public interface StructureElement extends ModelElement, HasProperties {
default boolean isComplexType() {
return false;
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Type.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Type.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Type.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Type.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Unit.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Unit.java
similarity index 96%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Unit.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Unit.java
index 93bf3dbe4..026e7e681 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Unit.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Unit.java
@@ -21,7 +21,7 @@
*
* @since SAMM 1.0.0
*/
-public interface Unit extends NamedElement {
+public interface Unit extends ModelElement {
/**
* Returns the unit's symbol
*/
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Value.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Value.java
similarity index 100%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/Value.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/Value.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Code.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Code.java
similarity index 82%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Code.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Code.java
index d0eb30048..92ea22ea2 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Code.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Code.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import org.eclipse.esmf.metamodel.Characteristic;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Collection.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Collection.java
similarity index 91%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Collection.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Collection.java
index 341dfc2f6..d5bc7d37f 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Collection.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Collection.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import java.util.Optional;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Duration.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Duration.java
similarity index 80%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Duration.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Duration.java
index 343d85f18..70f21ce7d 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Duration.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Duration.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A time duration according to ISO 8601.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Either.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Either.java
similarity index 88%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Either.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Either.java
index 2e38ca5cc..28a0646bf 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Either.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Either.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import org.eclipse.esmf.metamodel.Characteristic;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Enumeration.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Enumeration.java
similarity index 88%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Enumeration.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Enumeration.java
index 6a29aaee8..225b365ba 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Enumeration.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Enumeration.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import java.util.List;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/List.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/List.java
similarity index 81%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/List.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/List.java
index 039fd2204..fb239f630 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/List.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/List.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A collection which may contain duplicates and is ordered.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Measurement.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Measurement.java
similarity index 81%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Measurement.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Measurement.java
index f75297c31..5b9e9c638 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Measurement.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Measurement.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A value which can be measured and has a unit.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Quantifiable.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Quantifiable.java
similarity index 86%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Quantifiable.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Quantifiable.java
index 9e35929b0..b65317fd7 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Quantifiable.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Quantifiable.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import java.util.Optional;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Set.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Set.java
similarity index 81%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Set.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Set.java
index 2ca6942b2..9d75031e3 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Set.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Set.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A collection which may not contain duplicates and is unordered.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SingleEntity.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SingleEntity.java
similarity index 82%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SingleEntity.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SingleEntity.java
index e0ee0406e..fd4fee7a5 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SingleEntity.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SingleEntity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import org.eclipse.esmf.metamodel.Characteristic;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SortedSet.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SortedSet.java
similarity index 81%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SortedSet.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SortedSet.java
index 805b79403..a83878d00 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/SortedSet.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/SortedSet.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A collection which may not contain duplicates and is ordered.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/State.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/State.java
similarity index 87%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/State.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/State.java
index 14413ade1..66b6146db 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/State.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/State.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Value;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/StructuredValue.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/StructuredValue.java
similarity index 87%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/StructuredValue.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/StructuredValue.java
index 8762c7150..0a64857a2 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/StructuredValue.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/StructuredValue.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import java.util.List;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/TimeSeries.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/TimeSeries.java
similarity index 82%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/TimeSeries.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/TimeSeries.java
index 399671f9e..47ea37c1d 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/TimeSeries.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/TimeSeries.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
/**
* A collection containing values with the exact point in time when the values where recorded.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Trait.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Trait.java
similarity index 89%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Trait.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Trait.java
index 1d41b8fe9..de31c8eec 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/characteristic/Trait.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/characteristic/Trait.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.characteristic;
+package org.eclipse.esmf.metamodel.characteristic;
import java.util.List;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/EncodingConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/EncodingConstraint.java
similarity index 87%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/EncodingConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/EncodingConstraint.java
index 8d88e10fd..fb15d34c3 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/EncodingConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/EncodingConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import java.nio.charset.Charset;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/FixedPointConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/FixedPointConstraint.java
similarity index 85%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/FixedPointConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/FixedPointConstraint.java
index 5163b7848..54d36863d 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/FixedPointConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/FixedPointConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import org.eclipse.esmf.metamodel.Constraint;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LanguageConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LanguageConstraint.java
similarity index 86%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LanguageConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LanguageConstraint.java
index a8afce224..69c9e8085 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LanguageConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LanguageConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import java.util.Locale;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LengthConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LengthConstraint.java
similarity index 87%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LengthConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LengthConstraint.java
index 255dbe29b..f708e659f 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LengthConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LengthConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import java.math.BigInteger;
import java.util.Optional;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LocaleConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LocaleConstraint.java
similarity index 86%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LocaleConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LocaleConstraint.java
index 697f108da..8d9ca00a1 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/LocaleConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/LocaleConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import java.util.Locale;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RangeConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RangeConstraint.java
similarity index 90%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RangeConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RangeConstraint.java
index bd25e558b..f0310e299 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RangeConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RangeConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,14 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import java.util.Optional;
+import org.eclipse.esmf.metamodel.BoundDefinition;
import org.eclipse.esmf.metamodel.Constraint;
import org.eclipse.esmf.metamodel.ScalarValue;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.impl.BoundDefinition;
/**
* Restricts the value of a Property to a specific set of possible values.
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RegularExpressionConstraint.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RegularExpressionConstraint.java
similarity index 86%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RegularExpressionConstraint.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RegularExpressionConstraint.java
index 5f944420e..40b2e9da2 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/constraint/RegularExpressionConstraint.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/constraint/RegularExpressionConstraint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.constraint;
+package org.eclipse.esmf.metamodel.constraint;
import org.eclipse.esmf.metamodel.Constraint;
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/Curie.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/Curie.java
new file mode 100644
index 000000000..560caa9d9
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/Curie.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+package org.eclipse.esmf.metamodel.datatype;
+
+/**
+ * Represents a value of the samm:curie data type. For the class that represents the type itself, see {@link CurieType}.
+ */
+public record Curie( String value ) implements Comparable {
+ @Override
+ public String toString() {
+ return value;
+ }
+
+ @Override
+ public int compareTo( final Curie other ) {
+ return value.compareTo( other.value );
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/CurieRdfType.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/CurieType.java
similarity index 51%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/CurieRdfType.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/CurieType.java
index 233a3220e..215d09d66 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/CurieRdfType.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/CurieType.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,74 +11,90 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.metamodel.datatype;
+import java.util.Objects;
import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
-import org.eclipse.esmf.aspectmodel.resolver.services.TypedRdfDatatype;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
-import org.eclipse.esmf.metamodel.datatypes.Curie;
-import org.eclipse.esmf.samm.KnownVersion;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.datatypes.DatatypeFormatException;
import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.graph.impl.LiteralLabel;
-public class CurieRdfType implements TypedRdfDatatype {
+/**
+ * Represents the samm:curie datatype itself. For the class that represents a Curie value, see {@link Curie}.
+ */
+public class CurieType implements SammType {
+ public static final String CURIE_REGEX = "[a-zA-Z]*:[a-zA-Z]+";
+ private final Function parser = Curie::new;
+ private final Function unparser = Curie::value;
+ private final Predicate lexicalValidator = value -> value.matches( CURIE_REGEX );
+
@Override
public Optional parseTyped( final String lexicalForm ) {
- if ( isValid( lexicalForm ) ) {
- return Optional.of( new Curie( lexicalForm ) );
+ try {
+ return Optional.of( parser.apply( lexicalForm ) );
+ } catch ( final RuntimeException exception ) {
+ if ( SammXsdType.isCheckingEnabled() ) {
+ throw exception;
+ }
}
return Optional.empty();
}
@Override
public String unparseTyped( final Curie value ) {
- return value.getValue();
+ return unparser.apply( value );
}
@Override
public String getURI() {
- return new SAMM( KnownVersion.getLatest() ).curie().getURI();
+ return SammNs.SAMM.curie().getURI();
}
@Override
public String unparse( final Object value ) {
- if ( value instanceof Curie curie ) {
- return unparseTyped( curie );
- }
- throw new AspectLoadingException( "Value is no valid curie: " + value );
+ return unparseTyped( (Curie) value );
}
@Override
public Object parse( final String lexicalForm ) throws DatatypeFormatException {
- return parseTyped( lexicalForm ).orElseThrow( () -> new DatatypeFormatException() );
+ try {
+ return parser.apply( lexicalForm );
+ } catch ( final Exception exception ) {
+ if ( SammXsdType.isCheckingEnabled() ) {
+ throw exception;
+ }
+ }
+ return lexicalForm;
}
@Override
public boolean isValid( final String lexicalForm ) {
- return lexicalForm.matches( "[^:]*:.*" );
+ return lexicalValidator.test( lexicalForm );
}
@Override
public boolean isValidValue( final Object valueForm ) {
- return isValid( valueForm.toString() );
+ return isValid( unparse( valueForm ) );
}
@Override
public boolean isValidLiteral( final LiteralLabel lit ) {
- return isValid( lit.getLexicalForm() );
+ return lexicalValidator.test( lit.getValue().toString() );
}
@Override
public boolean isEqual( final LiteralLabel value1, final LiteralLabel value2 ) {
- return value1.getLexicalForm().equals( value2.getLexicalForm() );
+ return Objects.equals( value1, value2 );
}
@Override
public int getHashCode( final LiteralLabel lit ) {
- return lit.getDefaultHashcode();
+ return System.identityHashCode( lit );
}
@Override
@@ -93,11 +109,11 @@ public Object cannonicalise( final Object value ) {
@Override
public Object extendedTypeDefinition() {
- return null;
+ return Curie.class;
}
@Override
- public RDFDatatype normalizeSubType( final Object value, final RDFDatatype datatype ) {
- return datatype;
+ public RDFDatatype normalizeSubType( final Object value, final RDFDatatype dt ) {
+ return dt;
}
}
diff --git a/core/esmf-aspect-meta-model-types/src/main/java/org/eclipse/esmf/metamodel/datatypes/LangString.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/LangString.java
similarity index 90%
rename from core/esmf-aspect-meta-model-types/src/main/java/org/eclipse/esmf/metamodel/datatypes/LangString.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/LangString.java
index 97d8c7f3c..21b242c49 100644
--- a/core/esmf-aspect-meta-model-types/src/main/java/org/eclipse/esmf/metamodel/datatypes/LangString.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/LangString.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,13 +11,13 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.datatypes;
+package org.eclipse.esmf.metamodel.datatype;
import java.util.Locale;
import java.util.Objects;
/**
- * Java representation of an rdf:langString.
+ * Java representation of an rdf:langString value.
*/
public class LangString implements Comparable {
private final String value;
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/TypedRdfDatatype.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammType.java
similarity index 53%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/TypedRdfDatatype.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammType.java
index 472f362bf..85ec3851e 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/TypedRdfDatatype.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammType.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,13 +11,20 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.resolver.services;
+package org.eclipse.esmf.metamodel.datatype;
import java.util.Optional;
import org.apache.jena.datatypes.RDFDatatype;
-public interface TypedRdfDatatype extends RDFDatatype {
+public interface SammType extends RDFDatatype {
+ /**
+ * Parses a lexical representation of a value of the type
+ *
+ * @param lexicalForm the lexical representation
+ * @return if the lexical representation is valid for the type, Optional.of(x) where x is an object of the corresponding Java type (@see
+ * {@link #getJavaClass()}), otherwise Optional.empty.
+ */
Optional parseTyped( String lexicalForm );
String unparseTyped( T value );
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/ExtendedXsdDataType.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammXsdType.java
similarity index 71%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/ExtendedXsdDataType.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammXsdType.java
index f223030b4..eda0aa096 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/services/ExtendedXsdDataType.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/datatype/SammXsdType.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.resolver.services;
+package org.eclipse.esmf.metamodel.datatype;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -20,21 +20,26 @@
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
+import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import jakarta.xml.bind.DatatypeConverter;
import org.apache.jena.datatypes.RDFDatatype;
+import org.apache.jena.datatypes.TypeMapper;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.datatypes.xsd.impl.RDFLangString;
import org.apache.jena.ext.xerces.impl.dv.XSSimpleType;
import org.apache.jena.ext.xerces.impl.dv.xs.ExtendedSchemaDVFactoryImpl;
import org.apache.jena.rdf.model.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
// the order of the variables is required because of the way they reference each other
-public class ExtendedXsdDataType extends XSDDatatype implements TypedRdfDatatype {
- static DatatypeFactory datatypeFactory;
+public class SammXsdType extends XSDDatatype implements SammType {
+ private static final Logger LOG = LoggerFactory.getLogger( SammXsdType.class );
+ public static DatatypeFactory datatypeFactory;
private final Class correspondingJavaClass;
private final Function parser;
@@ -43,7 +48,7 @@ public class ExtendedXsdDataType extends XSDDatatype implements TypedRdfDatat
private static boolean checking = true;
private static final ExtendedSchemaDVFactoryImpl EXTENDED_SCHEMA_DV_FACTORY = new ExtendedSchemaDVFactoryImpl();
- public ExtendedXsdDataType( final Resource dataTypeResource, final Class correspondingJavaClass,
+ public SammXsdType( final Resource dataTypeResource, final Class correspondingJavaClass,
final Function parser,
final Function unparser,
final Predicate lexicalValidator ) {
@@ -54,7 +59,7 @@ public ExtendedXsdDataType( final Resource dataTypeResource, final Class corr
this.lexicalValidator = lexicalValidator;
}
- private ExtendedXsdDataType( final Resource dataTypeResource, final XSSimpleType xstype,
+ private SammXsdType( final Resource dataTypeResource, final XSSimpleType xstype,
final Class correspondingJavaClass,
final Function parser,
final Function unparser,
@@ -67,19 +72,19 @@ private ExtendedXsdDataType( final Resource dataTypeResource, final XSSimpleType
this.lexicalValidator = lexicalValidator;
}
- public static final ExtendedXsdDataType BOOLEAN = new ExtendedXsdDataType<>(
+ public static final SammXsdType BOOLEAN = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.xboolean, Boolean.class, Boolean::valueOf, Object::toString,
XSDDatatype.XSDboolean::isValid );
- public static final ExtendedXsdDataType DECIMAL = new ExtendedXsdDataType<>(
+ public static final SammXsdType DECIMAL = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.decimal, BigDecimal.class, BigDecimal::new, BigDecimal::toString,
XSDDatatype.XSDdecimal::isValid );
- public static final ExtendedXsdDataType INTEGER = new ExtendedXsdDataType<>(
+ public static final SammXsdType INTEGER = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.integer, BigInteger.class, BigInteger::new, BigInteger::toString,
XSDDatatype.XSDinteger::isValid );
- public static final ExtendedXsdDataType DOUBLE = new ExtendedXsdDataType<>(
+ public static final SammXsdType DOUBLE = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.xdouble, Double.class, value -> {
if ( "INF".equalsIgnoreCase( value ) ) {
return Double.POSITIVE_INFINITY;
@@ -99,7 +104,7 @@ private ExtendedXsdDataType( final Resource dataTypeResource, final XSSimpleType
return value.toString();
}, XSDDatatype.XSDdouble::isValid );
- public static final ExtendedXsdDataType FLOAT = new ExtendedXsdDataType<>(
+ public static final SammXsdType FLOAT = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.xfloat, Float.class, value -> {
if ( "INF".equalsIgnoreCase( value ) ) {
return Float.POSITIVE_INFINITY;
@@ -119,136 +124,136 @@ private ExtendedXsdDataType( final Resource dataTypeResource, final XSSimpleType
return value.toString();
}, XSDDatatype.XSDfloat::isValid );
- public static final ExtendedXsdDataType DATE = new ExtendedXsdDataType<>(
+ public static final SammXsdType DATE = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.date, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDdate::isValid );
- public static final ExtendedXsdDataType TIME = new ExtendedXsdDataType<>(
+ public static final SammXsdType TIME = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.time, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDtime::isValid );
- public static final ExtendedXsdDataType DATE_TIME = new ExtendedXsdDataType<>(
+ public static final SammXsdType DATE_TIME = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.dateTime, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDdateTime::isValid );
- public static final ExtendedXsdDataType DATE_TIME_STAMP = new ExtendedXsdDataType<>(
+ public static final SammXsdType DATE_TIME_STAMP = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.dateTimeStamp,
EXTENDED_SCHEMA_DV_FACTORY.getBuiltInType( org.apache.jena.vocabulary.XSD.dateTimeStamp.getLocalName() ),
XMLGregorianCalendar.class, value -> datatypeFactory.newXMLGregorianCalendar( value ),
XMLGregorianCalendar::toXMLFormat, XSDDatatype.XSDdateTimeStamp::isValid );
- public static final ExtendedXsdDataType G_YEAR = new ExtendedXsdDataType<>(
+ public static final SammXsdType G_YEAR = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.gYear, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDgYear::isValid );
- public static final ExtendedXsdDataType G_MONTH = new ExtendedXsdDataType<>(
+ public static final SammXsdType G_MONTH = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.gMonth, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ),
XMLGregorianCalendar::toXMLFormat, XSDDatatype.XSDgMonth::isValid );
- public static final ExtendedXsdDataType G_DAY = new ExtendedXsdDataType<>(
+ public static final SammXsdType G_DAY = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.gDay, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDgDay::isValid );
- public static final ExtendedXsdDataType G_YEAR_MONTH = new ExtendedXsdDataType<>(
+ public static final SammXsdType G_YEAR_MONTH = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.gYearMonth, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDgYearMonth::isValid );
- public static final ExtendedXsdDataType G_MONTH_DAY = new ExtendedXsdDataType<>(
+ public static final SammXsdType G_MONTH_DAY = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.gMonthDay, XMLGregorianCalendar.class,
value -> datatypeFactory.newXMLGregorianCalendar( value ), XMLGregorianCalendar::toXMLFormat,
XSDDatatype.XSDgMonthDay::isValid );
- public static final ExtendedXsdDataType DURATION = new ExtendedXsdDataType<>(
+ public static final SammXsdType DURATION = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.duration, Duration.class, value -> datatypeFactory.newDuration( value ),
Duration::toString, XSDDatatype.XSDduration::isValid );
- public static final ExtendedXsdDataType YEAR_MONTH_DURATION = new ExtendedXsdDataType<>(
+ public static final SammXsdType YEAR_MONTH_DURATION = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.yearMonthDuration,
EXTENDED_SCHEMA_DV_FACTORY.getBuiltInType( org.apache.jena.vocabulary.XSD.yearMonthDuration.getLocalName() ),
Duration.class, value -> datatypeFactory.newDurationYearMonth( value ), Duration::toString,
XSDDatatype.XSDyearMonthDuration::isValid );
- public static final ExtendedXsdDataType DAY_TIME_DURATION = new ExtendedXsdDataType<>(
+ public static final SammXsdType DAY_TIME_DURATION = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.dayTimeDuration,
EXTENDED_SCHEMA_DV_FACTORY.getBuiltInType( org.apache.jena.vocabulary.XSD.dayTimeDuration.getLocalName() ),
Duration.class, value -> datatypeFactory.newDurationDayTime( value ), Duration::toString,
XSDDatatype.XSDdayTimeDuration::isValid );
- public static final ExtendedXsdDataType BYTE = new ExtendedXsdDataType<>( org.apache.jena.vocabulary.XSD.xbyte,
+ public static final SammXsdType BYTE = new SammXsdType<>( org.apache.jena.vocabulary.XSD.xbyte,
Byte.class, Byte::parseByte, Object::toString, XSDDatatype.XSDbyte::isValid );
- public static final ExtendedXsdDataType SHORT = new ExtendedXsdDataType<>(
+ public static final SammXsdType SHORT = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.xshort, Short.class, Short::parseShort, Object::toString,
XSDDatatype.XSDshort::isValid );
- public static final ExtendedXsdDataType INT = new ExtendedXsdDataType<>(
+ public static final SammXsdType INT = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.xint, Integer.class, Integer::parseInt, Object::toString,
XSDDatatype.XSDint::isValid );
- public static final ExtendedXsdDataType LONG = new ExtendedXsdDataType<>( org.apache.jena.vocabulary.XSD.xlong,
+ public static final SammXsdType LONG = new SammXsdType<>( org.apache.jena.vocabulary.XSD.xlong,
Long.class, Long::parseLong, Object::toString, XSDDatatype.XSDlong::isValid );
- public static final ExtendedXsdDataType UNSIGNED_BYTE = new ExtendedXsdDataType<>(
+ public static final SammXsdType UNSIGNED_BYTE = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.unsignedByte, Short.class, Short::parseShort, Object::toString,
XSDDatatype.XSDunsignedByte::isValid );
- public static final ExtendedXsdDataType UNSIGNED_SHORT = new ExtendedXsdDataType<>(
+ public static final SammXsdType UNSIGNED_SHORT = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.unsignedShort, Integer.class, Integer::parseInt, Object::toString,
XSDDatatype.XSDunsignedShort::isValid );
- public static final ExtendedXsdDataType UNSIGNED_INT = new ExtendedXsdDataType<>(
+ public static final SammXsdType UNSIGNED_INT = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.unsignedInt, Long.class, Long::parseLong, Object::toString,
XSDDatatype.XSDunsignedInt::isValid );
- public static final ExtendedXsdDataType UNSIGNED_LONG = new ExtendedXsdDataType<>(
+ public static final SammXsdType UNSIGNED_LONG = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.unsignedLong, BigInteger.class, BigInteger::new, BigInteger::toString,
XSDDatatype.XSDunsignedLong::isValid );
- public static final ExtendedXsdDataType POSITIVE_INTEGER = new ExtendedXsdDataType<>(
+ public static final SammXsdType POSITIVE_INTEGER = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.positiveInteger, BigInteger.class,
BigInteger::new, BigInteger::toString, XSDDatatype.XSDpositiveInteger::isValid );
- public static final ExtendedXsdDataType NON_NEGATIVE_INTEGER = new ExtendedXsdDataType<>(
+ public static final SammXsdType NON_NEGATIVE_INTEGER = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.nonNegativeInteger, BigInteger.class,
BigInteger::new, BigInteger::toString, XSDDatatype.XSDnonNegativeInteger::isValid );
- public static final ExtendedXsdDataType NEGATIVE_INTEGER = new ExtendedXsdDataType<>(
+ public static final SammXsdType NEGATIVE_INTEGER = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.negativeInteger, BigInteger.class,
BigInteger::new, BigInteger::toString, XSDDatatype.XSDnegativeInteger::isValid );
- public static final ExtendedXsdDataType NON_POSITIVE_INTEGER = new ExtendedXsdDataType<>(
+ public static final SammXsdType NON_POSITIVE_INTEGER = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.nonPositiveInteger, BigInteger.class,
BigInteger::new, BigInteger::toString, XSDDatatype.XSDnonPositiveInteger::isValid );
- public static final ExtendedXsdDataType HEX_BINARY = new ExtendedXsdDataType<>(
+ public static final SammXsdType HEX_BINARY = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.hexBinary, byte[].class, DatatypeConverter::parseHexBinary,
DatatypeConverter::printHexBinary, XSDDatatype.XSDhexBinary::isValid );
- public static final ExtendedXsdDataType BASE64_BINARY = new ExtendedXsdDataType<>(
+ public static final SammXsdType BASE64_BINARY = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.base64Binary, byte[].class, DatatypeConverter::parseBase64Binary,
DatatypeConverter::printBase64Binary, XSDDatatype.XSDbase64Binary::isValid );
- public static final ExtendedXsdDataType ANY_URI = new ExtendedXsdDataType<>(
+ public static final SammXsdType ANY_URI = new SammXsdType<>(
org.apache.jena.vocabulary.XSD.anyURI, URI.class,
value -> URI.create( (String) XSDDatatype.XSDanyURI.parse( value ) ),
URI::toString, XSDDatatype.XSDanyURI::isValid );
- public static final List SUPPORTED_XSD_TYPES = List
+ public static final List ALL_TYPES = List
.of( XSDDatatype.XSDstring, BOOLEAN, DECIMAL, INTEGER, DOUBLE, FLOAT, DATE, TIME, DATE_TIME, DATE_TIME_STAMP,
G_YEAR, G_MONTH, G_YEAR_MONTH, G_DAY, G_MONTH_DAY, DURATION, YEAR_MONTH_DURATION, DAY_TIME_DURATION,
BYTE, SHORT, INT, LONG, UNSIGNED_BYTE, UNSIGNED_SHORT, UNSIGNED_INT, UNSIGNED_LONG,
POSITIVE_INTEGER, NON_NEGATIVE_INTEGER, NEGATIVE_INTEGER, NON_POSITIVE_INTEGER, HEX_BINARY,
- BASE64_BINARY, ANY_URI, RDFLangString.rdfLangString );
+ BASE64_BINARY, ANY_URI, RDFLangString.rdfLangString, new CurieType() );
public static void setChecking( final boolean checking ) {
- ExtendedXsdDataType.checking = checking;
+ SammXsdType.checking = checking;
}
public static boolean isCheckingEnabled() {
@@ -274,13 +279,6 @@ public Object parse( final String lexicalForm ) {
return lexicalForm;
}
- /**
- * Parses a lexical representaion of a value of the type
- *
- * @param lexicalForm the lexical representation
- * @return if the lexical representation is valid for the type, Optional.of(x) where x is an object of the corresponding Java type (@see
- * {@link #getJavaClass()}), otherwise Optional.empty.
- */
@Override
public Optional parseTyped( final String lexicalForm ) {
try {
@@ -313,4 +311,38 @@ public boolean isValid( final String lexicalForm ) {
public Class getJavaClass() {
return correspondingJavaClass;
}
+
+ private static boolean setupPerformed = false;
+
+ /**
+ * Idempotent method to register the SAMM type mapping in the Jena RDF parser.
+ */
+ public static synchronized void setupTypeMapping() {
+ if ( !setupPerformed ) {
+ try {
+ datatypeFactory = DatatypeFactory.newInstance();
+ } catch ( final DatatypeConfigurationException exception ) {
+ LOG.error( "Could not instantiate DatatypeFactory", exception );
+ }
+
+ final TypeMapper typeMapper = TypeMapper.getInstance();
+ ALL_TYPES.forEach( typeMapper::registerDatatype );
+ setupPerformed = true;
+ }
+ }
+
+ /**
+ * Returns the Java class corresponding to a XSD type in a given meta model version.
+ *
+ * @param type the resource of the data type
+ * @return the java class
+ */
+ public static Class> getJavaTypeForMetaModelType( final Resource type ) {
+ return ALL_TYPES
+ .stream()
+ .filter( xsdType -> xsdType.getURI().equals( type.getURI() ) )
+ .map( RDFDatatype::getJavaClass )
+ .findAny()
+ .orElseThrow( () -> new IllegalStateException( "Invalid data type " + type + " found in model." ) );
+ }
}
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/Namespace.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/RdfNamespace.java
similarity index 54%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/Namespace.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/RdfNamespace.java
index 1e953a5da..2eea404c2 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/Namespace.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/RdfNamespace.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.vocabulary;
+package org.eclipse.esmf.metamodel.vocabulary;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -28,7 +28,9 @@
/**
* Abstracts an RDF namespace
*/
-public interface Namespace {
+public interface RdfNamespace {
+ String getShortForm();
+
String getUri();
default String getNamespace() {
@@ -36,29 +38,40 @@ default String getNamespace() {
return uri.endsWith( "#" ) ? uri : uri + "#";
}
+ default String urn( final String element ) {
+ return getNamespace() + element;
+ }
+
default Property property( final String name ) {
- return ResourceFactory.createProperty( getNamespace() + name );
+ return ResourceFactory.createProperty( urn( name ) );
}
default Resource resource( final String name ) {
- return ResourceFactory.createResource( getNamespace() + name );
+ return ResourceFactory.createResource( urn( name ) );
}
static Map createPrefixMap( final KnownVersion metaModelVersion ) {
+ final Map result = new LinkedHashMap<>();
final SAMM samm = new SAMM( metaModelVersion );
- final SAMMC sammc = new SAMMC( metaModelVersion );
- final SAMME samme = new SAMME( metaModelVersion, samm );
- final UNIT unit = new UNIT( metaModelVersion, samm );
+ result.put( "samm", samm.getNamespace() );
+ result.put( "samm-c", new SAMMC( metaModelVersion ).getNamespace() );
+ result.put( "samm-e", new SAMME( metaModelVersion, samm ).getNamespace() );
+ result.put( "unit", new UNIT( metaModelVersion, samm ).getNamespace() );
+ result.put( "rdf", RDF.getURI() );
+ result.put( "rdfs", RDFS.getURI() );
+ result.put( "xsd", XSD.getURI() );
+ return result;
+ }
+ static Map createPrefixMap() {
final Map result = new LinkedHashMap<>();
- result.put( "samm", samm.getUri() + "#" );
- result.put( "samm-c", sammc.getUri() + "#" );
- result.put( "samm-e", samme.getUri() + "#" );
- result.put( "unit", unit.getUri() + "#" );
+ result.put( "samm", SammNs.SAMM.getNamespace() );
+ result.put( "samm-c", SammNs.SAMMC.getNamespace() );
+ result.put( "samm-e", SammNs.SAMME.getNamespace() );
+ result.put( "unit", SammNs.UNIT.getNamespace() );
result.put( "rdf", RDF.getURI() );
result.put( "rdfs", RDFS.getURI() );
result.put( "xsd", XSD.getURI() );
-
return result;
}
}
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMM.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMM.java
similarity index 95%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMM.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMM.java
index f5b6e3052..4f1116a1e 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMM.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMM.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -10,7 +10,7 @@
*
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.vocabulary;
+package org.eclipse.esmf.metamodel.vocabulary;
import org.eclipse.esmf.samm.KnownVersion;
@@ -23,7 +23,7 @@
// Since the class is an RDF vocabulary, naming rules for the class and for several methods (which should be named identically
// to the corresponding model elements) are suppressed.
@SuppressWarnings( { "checkstyle:AbbreviationAsWordInName", "NewMethodNamingConvention" } )
-public class SAMM implements Namespace {
+public class SAMM implements RdfNamespace {
final KnownVersion metaModelVersion;
private static final String BASE_URI = "urn:samm:org.eclipse.esmf.samm:";
@@ -31,6 +31,11 @@ public SAMM( final KnownVersion metaModelVersion ) {
this.metaModelVersion = metaModelVersion;
}
+ @Override
+ public String getShortForm() {
+ return "samm";
+ }
+
public String getBaseUri() {
return BASE_URI;
}
@@ -91,10 +96,6 @@ public Property characteristic() {
return property( "characteristic" );
}
- public Property baseCharacteristic() {
- return property( "baseCharacteristic" );
- }
-
@SuppressWarnings( "checkstyle:MethodName" )
public Resource Constraint() {
return resource( "Constraint" );
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMMC.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMMC.java
similarity index 95%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMMC.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMMC.java
index 8294d4055..f4cfd188a 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMMC.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMMC.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -10,7 +10,7 @@
*
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.vocabulary;
+package org.eclipse.esmf.metamodel.vocabulary;
import java.util.function.Function;
import java.util.stream.Stream;
@@ -26,18 +26,21 @@
// Since the class is an RDF vocabulary, naming rules for the class and for several methods (which should be named identically
// to the corresponding model elements) are suppressed.
@SuppressWarnings( { "checkstyle:AbbreviationAsWordInName", "NewMethodNamingConvention" } )
-public class SAMMC implements Namespace {
+public class SAMMC implements RdfNamespace {
private final KnownVersion metaModelVersion;
- private final SAMM samm;
public SAMMC( final KnownVersion metaModelVersion ) {
this.metaModelVersion = metaModelVersion;
- samm = new SAMM( metaModelVersion );
+ }
+
+ @Override
+ public String getShortForm() {
+ return "samm-c";
}
@Override
public String getUri() {
- return samm.getBaseUri() + "characteristic:" + metaModelVersion.toVersionString();
+ return SammNs.SAMM.getBaseUri() + "characteristic:" + metaModelVersion.toVersionString();
}
/*
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMME.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMME.java
similarity index 89%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMME.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMME.java
index b4c71b50e..97a2ffbef 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/SAMME.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SAMME.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.vocabulary;
+package org.eclipse.esmf.metamodel.vocabulary;
import java.util.stream.Stream;
@@ -23,7 +23,7 @@
// Since the class is an RDF vocabulary, naming rules for the class and for several methods (which should be named identically
// to the corresponding model elements) are suppressed.
@SuppressWarnings( { "checkstyle:AbbreviationAsWordInName", "NewMethodNamingConvention" } )
-public class SAMME implements Namespace {
+public class SAMME implements RdfNamespace {
private final KnownVersion metaModelVersion;
private final SAMM samm;
@@ -32,6 +32,11 @@ public SAMME( final KnownVersion metaModelVersion, final SAMM samm ) {
this.samm = samm;
}
+ @Override
+ public String getShortForm() {
+ return "samm-e";
+ }
+
@Override
public String getUri() {
return samm.getBaseUri() + "entity:" + metaModelVersion.toVersionString();
diff --git a/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SammNs.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SammNs.java
new file mode 100644
index 000000000..cb7a491c5
--- /dev/null
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/SammNs.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.metamodel.vocabulary;
+
+import org.eclipse.esmf.samm.KnownVersion;
+
+/**
+ * RDF vocabularies of the SAMM meta model namespaces
+ */
+public class SammNs {
+ public static final SAMM SAMM = new SAMM( KnownVersion.getLatest() );
+ public static final SAMMC SAMMC = new SAMMC( KnownVersion.getLatest() );
+ public static final SAMME SAMME = new SAMME( KnownVersion.getLatest(), SAMM );
+ public static final UNIT UNIT = new UNIT( KnownVersion.getLatest(), SAMM );
+}
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/UNIT.java b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/UNIT.java
similarity index 81%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/UNIT.java
rename to core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/UNIT.java
index d2ec3a413..e84c6300b 100644
--- a/core/esmf-aspect-meta-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/vocabulary/UNIT.java
+++ b/core/esmf-aspect-meta-model-interface/src/main/java/org/eclipse/esmf/metamodel/vocabulary/UNIT.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,14 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.aspectmodel.vocabulary;
+package org.eclipse.esmf.metamodel.vocabulary;
import org.eclipse.esmf.samm.KnownVersion;
// Since the class is an RDF vocabulary, naming rules for the class and for several methods (which should be named identically
// to the corresponding model elements) are suppressed.
@SuppressWarnings( { "checkstyle:AbbreviationAsWordInName", "CheckStyle" } )
-public class UNIT implements Namespace {
+public class UNIT implements RdfNamespace {
private final KnownVersion metaModelVersion;
private final SAMM samm;
@@ -27,6 +27,11 @@ public UNIT( final KnownVersion metaModelVersion, final SAMM samm ) {
this.samm = samm;
}
+ @Override
+ public String getShortForm() {
+ return "unit";
+ }
+
@Override
public String getUri() {
return samm.getBaseUri() + "unit:" + metaModelVersion.toVersionString();
diff --git a/core/esmf-aspect-meta-model-java/pom.xml b/core/esmf-aspect-meta-model-java/pom.xml
index 321d5e440..687c30a88 100644
--- a/core/esmf-aspect-meta-model-java/pom.xml
+++ b/core/esmf-aspect-meta-model-java/pom.xml
@@ -36,23 +36,27 @@
org.eclipse.esmf
- esmf-aspect-model-resolver
+ esmf-semantic-aspect-meta-model
org.eclipse.esmf
- esmf-aspect-meta-model-resolver
+ esmf-aspect-meta-model-interface
- org.eclipse.esmf
- esmf-semantic-aspect-meta-model
+ org.apache.commons
+ commons-text
- org.eclipse.esmf
- esmf-aspect-meta-model-types
+ org.apache.jena
+ jena-arq
- org.apache.commons
- commons-text
+ io.vavr
+ vavr
+
+
+ com.google.guava
+ guava
@@ -68,7 +72,7 @@
org.eclipse.esmf
- esmf-test-resources
+ esmf-test-aspect-models
test
diff --git a/core/esmf-aspect-meta-model-java/src-buildtime/main/java/org/eclipse/esmf/buildtime/GenerateUnitsTtl.java b/core/esmf-aspect-meta-model-java/src-buildtime/main/java/org/eclipse/esmf/buildtime/GenerateUnitsTtl.java
index a9881e339..3b1bd9d97 100644
--- a/core/esmf-aspect-meta-model-java/src-buildtime/main/java/org/eclipse/esmf/buildtime/GenerateUnitsTtl.java
+++ b/core/esmf-aspect-meta-model-java/src-buildtime/main/java/org/eclipse/esmf/buildtime/GenerateUnitsTtl.java
@@ -28,7 +28,8 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
+import org.eclipse.esmf.metamodel.vocabulary.SAMM;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.eclipse.esmf.samm.KnownVersion;
import com.google.common.collect.Lists;
@@ -75,13 +76,13 @@ public class GenerateUnitsTtl {
import java.util.Collections;
import java.util.stream.Collectors;
+ import org.eclipse.esmf.aspectmodel.AspectModelFile;
+ import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+ import org.eclipse.esmf.aspectmodel.resolver.modelfile.MetaModelFile;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
- import org.eclipse.esmf.metamodel.QuantityKind;
- import org.eclipse.esmf.metamodel.Unit;
+ import org.eclipse.esmf.metamodel.datatype.LangString;
import org.eclipse.esmf.metamodel.impl.DefaultUnit;
- import org.eclipse.esmf.samm.KnownVersion;
- import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
- import org.eclipse.esmf.metamodel.datatypes.LangString;
+ import org.eclipse.esmf.metamodel.vocabulary.SammNs;
/**
* Enumeration of Units as defined in Recommendation 20 by
@@ -94,6 +95,13 @@ private Units() {
}
// ${initMethods}
+
+ /**
+ * Returns the file that defines this unit
+ */
+ public AspectModelFile getSourceFile() {
+ return MetaModelFile.UNITS;
+ }
/**
* Returns the unit with a given name
@@ -168,10 +176,11 @@ public static Set unitsWithQuantityKind( final QuantityKind quantityKind )
import java.util.Arrays;
import java.util.Optional;
+ import org.eclipse.esmf.aspectmodel.AspectModelFile;
+ import org.eclipse.esmf.aspectmodel.resolver.modelfile.MetaModelFile;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
- import org.eclipse.esmf.metamodel.QuantityKind;
- import org.eclipse.esmf.metamodel.visitor.AspectVisitor;
- import org.eclipse.esmf.samm.KnownVersion;
+ import org.eclipse.esmf.aspectmodel.visitor.AspectVisitor;
+ import org.eclipse.esmf.metamodel.vocabulary.SammNs;
/**
* Enumeration of Quantity Kinds as defined in Recommendation 20
@@ -187,6 +196,16 @@ public enum QuantityKinds implements QuantityKind {
this.name = name;
this.label = label;
}
+
+ @Override
+ public AspectModelUrn urn() {
+ return AspectModelUrn.fromUrn( SammNs.UNIT.urn( name ) );
+ }
+
+ @Override
+ public AspectModelFile getSourceFile() {
+ return MetaModelFile.UNITS;
+ }
/**
* Returns the quantity kind's unique name
@@ -212,17 +231,6 @@ public String toString() {
return getLabel();
}
- @Override
- public Optional getAspectModelUrn() {
- return Optional.of( AspectModelUrn.fromUrn(
- String.format( "urn:samm:org.eclipse.esmf.samm:unit:%s#%s", KnownVersion.getLatest().toVersionString(), name ) ) );
- }
-
- @Override
- public KnownVersion getMetaModelVersion() {
- return KnownVersion.getLatest();
- }
-
@Override
public T accept( final AspectVisitor visitor, final C context ) {
return visitor.visitQuantityKind( this, context );
@@ -316,7 +324,7 @@ private List attributeValues( final Resource resource, final Property
}
private List unitDeclarations() {
- final SAMM samm = new SAMM( KnownVersion.getLatest() );
+ final SAMM samm = SammNs.SAMM;
final Function, String> buildDeclaration = optionalValue ->
optionalValue.map( StringEscapeUtils::escapeJava ).map( "Optional.of(\"%s\")"::formatted ).orElse( "Optional.empty()" );
@@ -336,20 +344,25 @@ private List unitDeclarations() {
optionalAttributeValue( unit, samm.referenceUnit() ).map( Statement::getResource ).map( Resource::getLocalName ) );
final String conversionFactorDeclaration = buildDeclaration.apply(
optionalAttributeValue( unit, samm.conversionFactor() ).map( Statement::getString ) );
- final String preferredNames = attributeValues( unit, samm.preferredName() ).stream().flatMap( buildLangString )
- .collect( Collectors.joining( ", ", "Set.of(", ")" ) );
- final String descriptions = attributeValues( unit, samm.description() ).stream().flatMap( buildLangString )
- .collect( Collectors.joining( ", ", "Set.of(", ")" ) );
- final String see = attributeValues( unit, samm.see() ).stream().map( seeValue -> "\"" + seeValue + "\"" )
- .collect( Collectors.joining( ", ", "List.of(", ")" ) );
+ final String preferredNames = attributeValues( unit, samm.preferredName() ).stream()
+ .map( statement -> ".withPreferredName( Locale.forLanguageTag( \"%s\" ), \"%s\" )".formatted( statement.getLanguage(),
+ statement.getString() ) ).collect( Collectors.joining() );
final String quantityKindDefs = attributeValues( unit, samm.quantityKind() ).stream()
.map( quantityKind -> "QuantityKinds." + toUpperSnakeCase( quantityKind.getResource().getLocalName() ) )
.collect( Collectors.joining( ", ", "new HashSet<>(Arrays.asList(", "))" ) );
final String quantityKinds = quantityKindDefs.contains( "()" ) ? "Collections.emptySet()" : quantityKindDefs;
-
final String metaModelBaseAttributes =
- "new MetaModelBaseAttributes( AspectModelUrn.fromUrn( \"%s\" ), \"%s\", %s, %s, %s )".formatted(
- unit.getURI(), name, preferredNames, descriptions, see );
+ "MetaModelBaseAttributes.builder().withUrn( SammNs.UNIT.urn( \"%s\" ) )%s%s%s.build()".formatted(
+ unit.getLocalName(),
+ attributeValues( unit, samm.preferredName() ).stream()
+ .map( statement -> ".withPreferredName( Locale.forLanguageTag( \"%s\" ), \"%s\" )".formatted(
+ statement.getLanguage(), statement.getString() ) ).collect( Collectors.joining() ),
+ attributeValues( unit, samm.description() ).stream()
+ .map( statement -> ".withDescription( Locale.forLanguageTag( \"%s\" ), \"%s\" )".formatted(
+ statement.getLanguage(), statement.getString() ) ).collect( Collectors.joining() ),
+ attributeValues( unit, samm.see() ).stream().map( seeValue -> "withSee( \"" + seeValue + "\" )" )
+ .collect( Collectors.joining() ) );
+
final String unitDefinition = "new DefaultUnit( %s, %s, %s, %s, %s, %s )".formatted( metaModelBaseAttributes, symbolDeclaration,
commonCodeDeclaration, referenceUnitDeclaration, conversionFactorDeclaration, quantityKinds );
return "UNITS_BY_NAME.put( \"%s\", %s );".formatted( name, unitDefinition );
@@ -357,7 +370,7 @@ private List unitDeclarations() {
}
private List quantityKindDeclarations() {
- final SAMM samm = new SAMM( KnownVersion.getLatest() );
+ final SAMM samm = SammNs.SAMM;
return Streams.stream( unitsModel.listStatements( null, RDF.type, samm.QuantityKind() ) ).map( Statement::getSubject )
.map( quantityKind -> {
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/AnyNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/AnyNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/AnyNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/AnyNode.java
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/BlankNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/BlankNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/BlankNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/BlankNode.java
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/LiteralNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/LiteralNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/LiteralNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/LiteralNode.java
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/TokenNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/TokenNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/TokenNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/TokenNode.java
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/UriNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/UriNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/UriNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/UriNode.java
diff --git a/core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/VariableNode.java b/core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/VariableNode.java
similarity index 100%
rename from core/esmf-aspect-meta-model-resolver/src/main/java/org/apache/jena/graph/VariableNode.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/apache/jena/graph/VariableNode.java
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AspectModelLoader.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AspectModelLoader.java
new file mode 100644
index 000000000..2d47de721
--- /dev/null
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AspectModelLoader.java
@@ -0,0 +1,355 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.aspectmodel.loader;
+
+import static java.util.stream.Collectors.toSet;
+
+import java.io.File;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
+import org.eclipse.esmf.aspectmodel.resolver.AspectModelFileLoader;
+import org.eclipse.esmf.aspectmodel.resolver.EitherStrategy;
+import org.eclipse.esmf.aspectmodel.resolver.FileSystemStrategy;
+import org.eclipse.esmf.aspectmodel.resolver.ModelResolutionException;
+import org.eclipse.esmf.aspectmodel.resolver.ResolutionStrategy;
+import org.eclipse.esmf.aspectmodel.resolver.ResolutionStrategySupport;
+import org.eclipse.esmf.aspectmodel.resolver.fs.FlatModelsRoot;
+import org.eclipse.esmf.aspectmodel.resolver.modelfile.DefaultAspectModelFile;
+import org.eclipse.esmf.aspectmodel.resolver.modelfile.MetaModelFile;
+import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
+import org.eclipse.esmf.aspectmodel.urn.ElementType;
+import org.eclipse.esmf.aspectmodel.urn.UrnSyntaxException;
+import org.eclipse.esmf.aspectmodel.versionupdate.MetaModelVersionMigrator;
+import org.eclipse.esmf.metamodel.AspectModel;
+import org.eclipse.esmf.metamodel.ModelElement;
+import org.eclipse.esmf.metamodel.impl.DefaultAspectModel;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
+
+import com.google.common.collect.Streams;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ModelFactory;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.XSD;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The core class to load an {@link AspectModel}.
+ */
+public class AspectModelLoader implements ResolutionStrategySupport {
+ private static final Logger LOG = LoggerFactory.getLogger( AspectModelLoader.class );
+
+ public static final Supplier DEFAULT_STRATEGY = () -> {
+ final Path currentDirectory = Path.of( System.getProperty( "user.dir" ) );
+ return new FileSystemStrategy( new FlatModelsRoot( currentDirectory ) );
+ };
+
+ private final ResolutionStrategy resolutionStrategy;
+
+ /**
+ * Default constructor. When encountering model elements not defined in the current file, this will use the default strategy of looking
+ * for definitions of model elements in .ttl files in the current working directory.
+ */
+ public AspectModelLoader() {
+ this( List.of() );
+ }
+
+ /**
+ * Constructor that takes a single {@link ResolutionStrategy} to control where the loading process should look for definitions
+ * of model elements not defined in the current file.
+ *
+ * @param resolutionStrategy the strategy
+ */
+ public AspectModelLoader( final ResolutionStrategy resolutionStrategy ) {
+ this( List.of( resolutionStrategy ) );
+ }
+
+ /**
+ * Constructor that takes multiple {@link ResolutionStrategy}s to control where the loading process should look for definitions
+ * of model elements not defined in the current file. The strategies are tried one after another until an element definition is found.
+ *
+ * @param resolutionStrategies the strategies
+ */
+ public AspectModelLoader( final List resolutionStrategies ) {
+ if ( resolutionStrategies.size() == 1 ) {
+ resolutionStrategy = resolutionStrategies.get( 0 );
+ } else if ( resolutionStrategies.isEmpty() ) {
+ resolutionStrategy = DEFAULT_STRATEGY.get();
+ } else {
+ resolutionStrategy = new EitherStrategy( resolutionStrategies );
+ }
+ }
+
+ /**
+ * Load an Aspect Model from a given file
+ *
+ * @param file the file
+ * @return the Aspect Model
+ */
+ public AspectModel load( final File file ) {
+ return load( List.of( file ) );
+ }
+
+ /**
+ * Load a set of files into a single Aspect Model
+ *
+ * @param files the files
+ * @return the Aspect Model
+ */
+ public AspectModel load( final Collection files ) {
+ final List migratedFiles = files.stream()
+ .map( AspectModelFileLoader::load )
+ .map( this::migrate )
+ .toList();
+ final LoaderContext loaderContext = new LoaderContext();
+ resolve( migratedFiles, loaderContext );
+ return buildAspectModel( loaderContext.loadedFiles() );
+ }
+
+ /**
+ * Load an Aspect Model by transitively resolving a given input URN
+ *
+ * @param urn the Aspect Model URN
+ * @return the Aspect Model
+ */
+ public AspectModel load( final AspectModelUrn urn ) {
+ return loadUrns( List.of( urn ) );
+ }
+
+ /**
+ * Load an Aspect Model by transitively resolving a set of given input URNs
+ *
+ * @param urns the Aspect Model URNs
+ * @return the Aspect Model
+ */
+ public AspectModel loadUrns( final Collection urns ) {
+ final LoaderContext loaderContext = new LoaderContext();
+ for ( final AspectModelUrn inputUrn : urns ) {
+ loaderContext.unresolvedUrns().add( inputUrn.toString() );
+ }
+ resolve( List.of(), loaderContext );
+ return buildAspectModel( loaderContext.loadedFiles() );
+ }
+
+ /**
+ * Load an Aspect Model from an input stream
+ *
+ * @param inputStream the input stream
+ * @return the Aspect Model
+ */
+ public AspectModel load( final InputStream inputStream ) {
+ final AspectModelFile rawFile = AspectModelFileLoader.load( inputStream );
+ final AspectModelFile migratedModel = migrate( rawFile );
+ final LoaderContext loaderContext = new LoaderContext();
+ resolve( List.of( migratedModel ), loaderContext );
+ return buildAspectModel( loaderContext.loadedFiles() );
+ }
+
+ private AspectModelFile migrate( final AspectModelFile file ) {
+ return MetaModelVersionMigrator.INSTANCE.apply( file );
+ }
+
+ private record LoaderContext(
+ Set resolvedUrns,
+ Set loadedFiles,
+ Deque unresolvedUrns,
+ Deque unresolvedFiles
+ ) {
+ private LoaderContext() {
+ this( new HashSet<>(), new HashSet<>(), new ArrayDeque<>(), new ArrayDeque<>() );
+ }
+ }
+
+ private Set getAllUrnsInModel( final Model model ) {
+ return Streams.stream( model.listStatements().mapWith( statement -> {
+ final Stream subjectUri = statement.getSubject().isURIResource()
+ ? Stream.of( statement.getSubject().getURI() )
+ : Stream.empty();
+ final Stream propertyUri = Stream.of( statement.getPredicate().getURI() );
+ final Stream objectUri = statement.getObject().isURIResource()
+ ? Stream.of( statement.getObject().asResource().getURI() )
+ : Stream.empty();
+
+ return Stream.of( subjectUri, propertyUri, objectUri )
+ .flatMap( Function.identity() )
+ .flatMap( urn -> AspectModelUrn.from( urn ).toJavaOptional().stream() )
+ .map( AspectModelUrn::toString );
+ } ) ).flatMap( Function.identity() ).collect( toSet() );
+ }
+
+ /**
+ * Adapter that enables the resolver to handle URNs with the legacy "urn:bamm:" prefix.
+ *
+ * @param urn the URN to clean up
+ * @return the original URN (if using valid urn:samm: scheme) or the the cleaned up URN
+ */
+ private String replaceLegacyBammUrn( final String urn ) {
+ if ( urn.startsWith( "urn:bamm:" ) ) {
+ return urn.replace( "urn:bamm:", "urn:samm:" );
+ }
+ return urn;
+ }
+
+ private boolean containsType( final Model model, final String urn ) {
+ if ( model.contains( model.createResource( urn ), RDF.type, (RDFNode) null ) ) {
+ return true;
+ } else if ( urn.startsWith( "urn:samm:" ) ) {
+ // when deriving a URN from file (via "fileToUrn" method - mainly in samm-cli scenarios),
+ // we assume new "samm" format, but could actually have been the old "bamm"
+ return model.contains( model.createResource( toLegacyBammUrn( urn ) ), RDF.type, (RDFNode) null );
+ }
+ return false;
+ }
+
+ private String toLegacyBammUrn( final String urn ) {
+ if ( urn.startsWith( "urn:samm:" ) ) {
+ return urn.replace( "urn:samm:", "urn:bamm:" );
+ }
+ return urn;
+ }
+
+ private Optional applyResolutionStrategy( final String urn ) {
+ if ( urn.startsWith( RDF.getURI() ) || urn.startsWith( XSD.getURI() ) ) {
+ return Optional.empty();
+ }
+
+ try {
+ final AspectModelUrn aspectModelUrn = AspectModelUrn.fromUrn( replaceLegacyBammUrn( urn ) );
+ if ( aspectModelUrn.getElementType() != ElementType.NONE ) {
+ return Optional.empty();
+ }
+ final AspectModelFile resolutionResult = resolutionStrategy.apply( aspectModelUrn, this );
+ if ( !containsType( resolutionResult.sourceModel(), urn ) ) {
+ throw new ModelResolutionException(
+ "Resolution strategy returned a model which does not contain element definition for " + urn );
+ }
+ return Optional.of( resolutionResult );
+ } catch ( final UrnSyntaxException e ) {
+ // If it's no valid Aspect Model URN but some other URI (e.g., a samm:see value), there is nothing
+ // to resolve, so we return just an empty model
+ return Optional.empty();
+ }
+ }
+
+ private void urnsFromModelNeedResolution( final AspectModelFile modelFile, final LoaderContext context ) {
+ Streams.stream( modelFile.sourceModel().listStatements( null, RDF.type, (RDFNode) null ) )
+ .map( Statement::getSubject )
+ .filter( Resource::isURIResource )
+ .map( Resource::getURI )
+ .filter( uri -> uri.startsWith( "urn:samm:" ) )
+ .forEach( urn -> context.resolvedUrns().add( urn ) );
+
+ getAllUrnsInModel( modelFile.sourceModel() ).stream()
+ .filter( urn -> !context.resolvedUrns().contains( urn ) )
+ .filter( urn -> !urn.startsWith( XSD.NS ) )
+ .filter( urn -> !urn.startsWith( RDF.uri ) )
+ .filter( urn -> !urn.startsWith( SammNs.SAMM.getNamespace() ) )
+ .filter( urn -> !urn.startsWith( SammNs.SAMMC.getNamespace() ) )
+ .filter( urn -> !urn.startsWith( SammNs.SAMME.getNamespace() ) )
+ .filter( urn -> !urn.startsWith( SammNs.UNIT.getNamespace() ) )
+ .forEach( urn -> context.unresolvedUrns().add( urn ) );
+ }
+
+ private void markModelFileAsLoaded( final AspectModelFile modelFile, final LoaderContext context ) {
+ if ( !context.loadedFiles().contains( modelFile ) ) {
+ context.loadedFiles().add( modelFile );
+ urnsFromModelNeedResolution( modelFile, context );
+ }
+ }
+
+ private void resolve( final List inputFiles, final LoaderContext context ) {
+ for ( final AspectModelFile aspectModelFile : inputFiles ) {
+ context.unresolvedFiles().push( aspectModelFile );
+ }
+
+ while ( !context.unresolvedFiles().isEmpty() || !context.unresolvedUrns().isEmpty() ) {
+ if ( !context.unresolvedFiles().isEmpty() ) {
+ final AspectModelFile modelFile = context.unresolvedFiles().pop();
+ if ( context.loadedFiles().contains( modelFile ) ) {
+ continue;
+ }
+ markModelFileAsLoaded( modelFile, context );
+ }
+
+ while ( !context.unresolvedUrns().isEmpty() ) {
+ applyResolutionStrategy( context.unresolvedUrns().pop() )
+ .map( this::migrate )
+ .ifPresent( resolvedFile -> markModelFileAsLoaded( resolvedFile, context ) );
+ }
+ }
+ }
+
+ private AspectModel buildAspectModel( final Collection inputFiles ) {
+ final Model mergedModel = ModelFactory.createDefaultModel();
+ mergedModel.add( MetaModelFile.metaModelDefinitions() );
+ for ( final AspectModelFile file : inputFiles ) {
+ mergedModel.add( file.sourceModel() );
+ }
+
+ final List elements = new ArrayList<>();
+ for ( final AspectModelFile file : inputFiles ) {
+ final DefaultAspectModelFile aspectModelFile = new DefaultAspectModelFile( file.sourceModel(), file.headerComment(),
+ file.sourceLocation() );
+ final Model model = file.sourceModel();
+ final ModelElementFactory modelElementFactory = new ModelElementFactory( mergedModel, Map.of(), element -> aspectModelFile );
+ final List fileElements = model.listStatements( null, RDF.type, (RDFNode) null ).toList().stream()
+ .map( Statement::getSubject )
+ .filter( RDFNode::isURIResource )
+ .map( resource -> mergedModel.createResource( resource.getURI() ) )
+ .map( resource -> modelElementFactory.create( ModelElement.class, resource ) )
+ .toList();
+ aspectModelFile.setElements( fileElements );
+ elements.addAll( fileElements );
+ }
+ return new DefaultAspectModel( mergedModel, elements );
+ }
+
+ /**
+ * Checks if a given model contains the definition of a model element.
+ *
+ * @param aspectModelFile the model file
+ * @param urn the URN of the model element
+ * @return true if the model contains the definition of the model element
+ */
+ @Override
+ public boolean containsDefinition( final AspectModelFile aspectModelFile, final AspectModelUrn urn ) {
+ final Model model = aspectModelFile.sourceModel();
+ if ( model.getNsPrefixMap().values().stream().anyMatch( prefixUri -> prefixUri.startsWith( "urn:bamm:" ) ) ) {
+ final boolean result = model.contains( model.createResource( urn.toString().replace( "urn:samm:", "urn:bamm:" ) ), RDF.type,
+ (RDFNode) null );
+ LOG.debug( "Checking if model contains {}: {}", urn, result );
+ return result;
+ }
+ final boolean result = model.contains( model.createResource( urn.toString() ), RDF.type, (RDFNode) null );
+ LOG.debug( "Checking if model contains {}: {}", urn, result );
+ return result;
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AttributeValueRetriever.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AttributeValueRetriever.java
similarity index 94%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AttributeValueRetriever.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AttributeValueRetriever.java
index 62d3b42db..2c6bc764d 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/AttributeValueRetriever.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/AttributeValueRetriever.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.aspectmodel.loader;
import java.util.ArrayList;
import java.util.HashSet;
@@ -19,7 +19,8 @@
import java.util.Optional;
import java.util.Set;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
+import org.eclipse.esmf.aspectmodel.AspectLoadingException;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFList;
@@ -40,12 +41,6 @@
*
*/
public class AttributeValueRetriever {
- protected final SAMM samm;
-
- public AttributeValueRetriever( final SAMM samm ) {
- this.samm = samm;
- }
-
/**
* Returns the value of an attribute on a model element (or its super elements)
*
@@ -101,7 +96,7 @@ private boolean isRdfList( final Resource resource ) {
* @param attribute the given attribute
* @return the list of statements asserting values for the attribute
*/
- protected List attributeValues( final Resource modelElement, final Property attribute ) {
+ public List attributeValues( final Resource modelElement, final Property attribute ) {
// Attribute values defined directly on the resource go into the result
final List result = new ArrayList<>();
for ( final StmtIterator iterator = modelElement.listProperties( attribute ); iterator.hasNext(); ) {
@@ -118,7 +113,7 @@ protected List attributeValues( final Resource modelElement, final Pr
// If the model element is a bnode with samm:property given, it's a Property reference. Follow it to retrieve the sought-for
// attribute assertions.
- final StmtIterator referenceIterator = modelElement.listProperties( samm.property() );
+ final StmtIterator referenceIterator = modelElement.listProperties( SammNs.SAMM.property() );
if ( referenceIterator.hasNext() ) {
final RDFNode referencedElement = referenceIterator.next().getObject();
if ( !referencedElement.isResource() ) {
@@ -129,7 +124,7 @@ protected List attributeValues( final Resource modelElement, final Pr
}
// If the model element is samm:extends another element, retrieve attribute assertions from this supertype as well.
- final StmtIterator extendsIterator = modelElement.listProperties( samm._extends() );
+ final StmtIterator extendsIterator = modelElement.listProperties( SammNs.SAMM._extends() );
if ( extendsIterator.hasNext() ) {
final RDFNode superElementNode = extendsIterator.next().getObject();
if ( !superElementNode.isResource() ) {
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/DefaultPropertyWrapper.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/DefaultPropertyWrapper.java
similarity index 94%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/DefaultPropertyWrapper.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/DefaultPropertyWrapper.java
index 33dbd4807..25f0adae0 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/DefaultPropertyWrapper.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/DefaultPropertyWrapper.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.aspectmodel.loader;
import java.util.Optional;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/Instantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/Instantiator.java
similarity index 75%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/Instantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/Instantiator.java
index c7ffb6bfb..0a4ac2152 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/Instantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/Instantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,11 +11,10 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.aspectmodel.loader;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -24,10 +23,8 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.eclipse.esmf.aspectmodel.AspectLoadingException;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMM;
-import org.eclipse.esmf.aspectmodel.vocabulary.SAMMC;
-import org.eclipse.esmf.aspectmodel.vocabulary.UNIT;
import org.eclipse.esmf.metamodel.AbstractEntity;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.CollectionValue;
@@ -40,9 +37,9 @@
import org.eclipse.esmf.metamodel.impl.DefaultCollectionValue;
import org.eclipse.esmf.metamodel.impl.DefaultEntityInstance;
import org.eclipse.esmf.metamodel.impl.DefaultScalar;
-import org.eclipse.esmf.samm.KnownVersion;
+import org.eclipse.esmf.metamodel.vocabulary.SAMM;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
-import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.RDFList;
@@ -55,44 +52,18 @@
public abstract class Instantiator extends AttributeValueRetriever implements Function {
protected final ModelElementFactory modelElementFactory;
protected Class targetClass;
- protected SAMMC sammc;
- protected UNIT unit;
protected Model model;
- protected KnownVersion metaModelVersion;
- protected final RDFDatatype curieDataType = new CurieRdfType();
protected final ValueInstantiator valueInstantiator;
public Instantiator( final ModelElementFactory modelElementFactory, final Class targetClass ) {
- super( modelElementFactory.getSamm() );
this.modelElementFactory = modelElementFactory;
this.targetClass = targetClass;
- sammc = modelElementFactory.getSammc();
- unit = modelElementFactory.getUnit();
model = modelElementFactory.getModel();
- metaModelVersion = modelElementFactory.getMetaModelVersion();
- valueInstantiator = new ValueInstantiator( metaModelVersion );
+ valueInstantiator = new ValueInstantiator();
}
protected MetaModelBaseAttributes buildBaseAttributes( final Resource resource ) {
- return MetaModelBaseAttributes.fromModelElement( metaModelVersion, resource, model, samm );
- }
-
- protected Statement propertyValueFromTypeTree( final Resource subject, final org.apache.jena.rdf.model.Property property ) {
- final Optional valueStatement = optionalAttributeValue( subject, property );
- if ( valueStatement.isPresent() ) {
- return valueStatement.get();
- }
-
- // Check if the subject is a Property reference, then we should continue to search the referenced Property
- final Optional propertyStatement = optionalAttributeValue( subject, samm.property() );
- if ( propertyStatement.isPresent() ) {
- return propertyValueFromTypeTree( propertyStatement.get().getObject().asResource(), property );
- }
-
- final Statement extendsStatement = optionalAttributeValue( subject, samm._extends() )
- .orElseThrow( () -> new AspectLoadingException( "Property " + property + " not found on " + subject + " or its supertypes" ) );
- final Resource superType = extendsStatement.getObject().asResource();
- return propertyValueFromTypeTree( superType, property );
+ return modelElementFactory.createBaseAttributes( resource );
}
/**
@@ -125,15 +96,15 @@ protected Type getType( final Resource characteristicResource ) {
final Optional entityStatement = optionalAttributeValue( dataTypeResource, RDF.type );
- if ( entityStatement.isPresent() && samm.Entity().equals( entityStatement.get().getObject().asResource() ) ) {
+ if ( entityStatement.isPresent() && SammNs.SAMM.Entity().equals( entityStatement.get().getObject().asResource() ) ) {
return modelElementFactory.create( Entity.class, entityStatement.get().getSubject() );
}
- if ( entityStatement.isPresent() && samm.AbstractEntity().equals( entityStatement.get().getObject().asResource() ) ) {
+ if ( entityStatement.isPresent() && SammNs.SAMM.AbstractEntity().equals( entityStatement.get().getObject().asResource() ) ) {
return modelElementFactory.create( AbstractEntity.class, entityStatement.get().getSubject() );
}
- return new DefaultScalar( dataTypeResource.getURI(), metaModelVersion );
+ return new DefaultScalar( dataTypeResource.getURI() );
}
/**
@@ -143,13 +114,13 @@ protected Type getType( final Resource characteristicResource ) {
* @return The statement describing the datatype
*/
private Statement getDataType( final Resource resource ) {
- return Optional.ofNullable( resource.getPropertyResourceValue( samm.baseCharacteristic() ) )
+ return Optional.ofNullable( resource.getPropertyResourceValue( SammNs.SAMMC.baseCharacteristic() ) )
.map( this::getDataType )
- .orElseGet( () -> resource.getProperty( samm.dataType() ) );
+ .orElseGet( () -> resource.getProperty( SammNs.SAMM.dataType() ) );
}
protected Optional getElementCharacteristic( final Resource collection ) {
- return optionalAttributeValue( collection, sammc.elementCharacteristic() )
+ return optionalAttributeValue( collection, SammNs.SAMMC.elementCharacteristic() )
.map( Statement::getResource )
.map( elementCharacteristicResource ->
modelElementFactory.create( Characteristic.class, elementCharacteristicResource ) );
@@ -187,16 +158,17 @@ protected Value buildValue( final RDFNode node, final Optional charact
// Collections
if ( characteristicResource.isPresent() ) {
final Resource characteristic = characteristicResource.get();
- final Optional elementCharacteristic = optionalAttributeValue( characteristic, sammc.elementCharacteristic() ).map(
+ final Optional elementCharacteristic = optionalAttributeValue( characteristic,
+ SammNs.SAMMC.elementCharacteristic() ).map(
Statement::getResource );
CollectionValue.CollectionType collectionType = null;
- if ( isTypeOfOrSubtypeOf( characteristic, sammc.Set() ) ) {
+ if ( isTypeOfOrSubtypeOf( characteristic, SammNs.SAMMC.Set() ) ) {
collectionType = CollectionValue.CollectionType.SET;
- } else if ( isTypeOfOrSubtypeOf( characteristic, sammc.SortedSet() ) ) {
+ } else if ( isTypeOfOrSubtypeOf( characteristic, SammNs.SAMMC.SortedSet() ) ) {
collectionType = CollectionValue.CollectionType.SORTEDSET;
- } else if ( isTypeOfOrSubtypeOf( characteristic, sammc.List() ) ) {
+ } else if ( isTypeOfOrSubtypeOf( characteristic, SammNs.SAMMC.List() ) ) {
collectionType = CollectionValue.CollectionType.LIST;
- } else if ( isTypeOfOrSubtypeOf( characteristic, sammc.Collection() ) ) {
+ } else if ( isTypeOfOrSubtypeOf( characteristic, SammNs.SAMMC.Collection() ) ) {
collectionType = CollectionValue.CollectionType.COLLECTION;
}
if ( collectionType != null ) {
@@ -224,8 +196,7 @@ private CollectionValue buildCollectionValue( final RDFList list, final Collecti
protected EntityInstance buildEntityInstance( final Resource entityInstance, final Entity type ) {
final Map assertions = new HashMap<>();
type.getAllProperties().forEach( property -> {
- final AspectModelUrn propertyUrn = property.getAspectModelUrn()
- .orElseThrow( () -> new AspectLoadingException( "Invalid Property without a URN found" ) );
+ final AspectModelUrn propertyUrn = property.urn();
final org.apache.jena.rdf.model.Property rdfProperty = model.createProperty( propertyUrn.getUrn().toASCIIString() );
final Statement statement = entityInstance.getProperty( rdfProperty );
if ( statement == null ) {
@@ -237,7 +208,7 @@ protected EntityInstance buildEntityInstance( final Resource entityInstance, fin
final RDFNode rdfValue = entityInstance.getProperty( rdfProperty ).getObject();
final Type propertyType = property.getDataType()
.orElseThrow( () -> new AspectLoadingException( "Invalid Property without a dataType found" ) );
- final Resource characteristic = attributeValue( rdfProperty, samm.characteristic() ).getResource();
+ final Resource characteristic = attributeValue( rdfProperty, SammNs.SAMM.characteristic() ).getResource();
final Value value = buildValue( rdfValue, Optional.of( characteristic ), propertyType );
assertions.put( property, value );
} );
@@ -246,12 +217,9 @@ protected EntityInstance buildEntityInstance( final Resource entityInstance, fin
}
private java.util.Collection createEmptyCollectionForType( final CollectionValue.CollectionType collectionType ) {
- if ( collectionType == CollectionValue.CollectionType.SORTEDSET ) {
+ if ( collectionType == CollectionValue.CollectionType.SORTEDSET || collectionType == CollectionValue.CollectionType.SET ) {
return new LinkedHashSet<>();
}
- if ( collectionType == CollectionValue.CollectionType.SET ) {
- return new HashSet<>();
- }
return new ArrayList<>();
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/MetaModelBaseAttributes.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/MetaModelBaseAttributes.java
new file mode 100644
index 000000000..17c332ff4
--- /dev/null
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/MetaModelBaseAttributes.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.aspectmodel.loader;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
+import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
+import org.eclipse.esmf.metamodel.HasDescription;
+import org.eclipse.esmf.metamodel.ModelElement;
+import org.eclipse.esmf.metamodel.datatype.LangString;
+
+/**
+ * Wrapper class for the attributes all Aspect Meta Model elements have.
+ */
+public class MetaModelBaseAttributes implements HasDescription {
+ private final AspectModelUrn urn;
+ private final Set preferredNames;
+ private final Set descriptions;
+ private final List see;
+ private final boolean isAnonymous;
+ private final AspectModelFile sourceFile;
+
+ private MetaModelBaseAttributes(
+ final AspectModelUrn urn,
+ final Set preferredNames,
+ final Set descriptions,
+ final List see,
+ final boolean isAnonymous,
+ final AspectModelFile sourceFile
+ ) {
+ this.urn = urn;
+ this.preferredNames = preferredNames;
+ this.descriptions = descriptions;
+ this.see = see;
+ this.isAnonymous = isAnonymous;
+ this.sourceFile = sourceFile;
+ }
+
+ public AspectModelUrn urn() {
+ return urn;
+ }
+
+ @Override
+ public String getName() {
+ return urn.getName();
+ }
+
+ @Override
+ public Set getPreferredNames() {
+ return preferredNames;
+ }
+
+ @Override
+ public Set getDescriptions() {
+ return descriptions;
+ }
+
+ @Override
+ public List getSee() {
+ return see;
+ }
+
+ public boolean isAnonymous() {
+ return isAnonymous;
+ }
+
+ public AspectModelFile getSourceFile() {
+ return sourceFile;
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ @Override
+ public boolean equals( final Object o ) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() ) {
+ return false;
+ }
+ final MetaModelBaseAttributes that = (MetaModelBaseAttributes) o;
+ return isAnonymous == that.isAnonymous && Objects.equals( urn, that.urn ) && Objects.equals( preferredNames,
+ that.preferredNames ) && Objects.equals( descriptions, that.descriptions ) && Objects.equals( see, that.see );
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash( urn, preferredNames, descriptions, see, isAnonymous );
+ }
+
+ /**
+ * Creates an instance of MetaModelBaseAttributes by copying them from a given element.
+ *
+ * @param modelElement the named model element to copy the base attributes from
+ * @return the newly created instance
+ */
+ public static MetaModelBaseAttributes fromModelElement( final ModelElement modelElement ) {
+ return new MetaModelBaseAttributes( modelElement.urn(), modelElement.getPreferredNames(),
+ modelElement.getDescriptions(), modelElement.getSee(), modelElement.isAnonymous(), modelElement.getSourceFile() );
+ }
+
+ public static class Builder {
+ private AspectModelUrn urn;
+ private final Set preferredNames = new HashSet<>();
+ private final Set descriptions = new HashSet<>();
+ private final List see = new ArrayList<>();
+ private boolean isAnonymous = true;
+ private AspectModelFile sourceFile;
+
+ public Builder withUrn( final String urn ) {
+ return withUrn( AspectModelUrn.fromUrn( urn ) );
+ }
+
+ public Builder withOptionalUrn( final Optional aspectModelUrn ) {
+ if ( aspectModelUrn.isPresent() ) {
+ return withUrn( aspectModelUrn.get() );
+ } else {
+ return isAnonymous();
+ }
+ }
+
+ public Builder withUrn( final AspectModelUrn urn ) {
+ isAnonymous = false;
+ this.urn = Objects.requireNonNull( urn );
+ return this;
+ }
+
+ public Builder isAnonymous() {
+ isAnonymous = true;
+ return this;
+ }
+
+ public Builder withPreferredName( final Locale locale, final String preferredName ) {
+ preferredNames.add( new LangString( preferredName, locale ) );
+ return this;
+ }
+
+ public Builder withPreferredNames( final Set preferredNames ) {
+ this.preferredNames.addAll( preferredNames );
+ return this;
+ }
+
+ public Builder withDescription( final Locale locale, final String description ) {
+ descriptions.add( new LangString( description, locale ) );
+ return this;
+ }
+
+ public Builder withDescriptions( final Set descriptions ) {
+ this.descriptions.addAll( descriptions );
+ return this;
+ }
+
+ public Builder withSee( final String see ) {
+ this.see.add( see );
+ return this;
+ }
+
+ public Builder withSee( final List see ) {
+ this.see.addAll( see );
+ return this;
+ }
+
+ public Builder withSourceFile( final AspectModelFile sourceFile ) {
+ this.sourceFile = sourceFile;
+ return this;
+ }
+
+ public Builder isAnonymous( final boolean isAnonymous ) {
+ this.isAnonymous = isAnonymous;
+ return this;
+ }
+
+ public MetaModelBaseAttributes build() {
+ return new MetaModelBaseAttributes( urn, preferredNames, descriptions, see, isAnonymous, sourceFile );
+ }
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ModelElementFactory.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ModelElementFactory.java
new file mode 100644
index 000000000..3606fe278
--- /dev/null
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ModelElementFactory.java
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.aspectmodel.loader;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.eclipse.esmf.aspectmodel.AspectLoadingException;
+import org.eclipse.esmf.aspectmodel.AspectModelFile;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.AbstractEntityInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.AspectInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.CharacteristicInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.CodeInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.CollectionInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.ConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.DurationInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EitherInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EncodingConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EntityInstanceInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EntityInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EnumerationInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.EventInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.FixedPointConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.LanguageConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.LengthConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.ListInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.LocaleConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.MeasurementInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.OperationInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.PropertyInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.QuantifiableInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.RangeConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.RegularExpressionConstraintInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.SetInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.SingleEntityInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.SortedSetInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.StateInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.StructuredValueInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.TimeSeriesInstantiator;
+import org.eclipse.esmf.aspectmodel.loader.instantiator.TraitInstantiator;
+import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
+import org.eclipse.esmf.metamodel.ComplexType;
+import org.eclipse.esmf.metamodel.Entity;
+import org.eclipse.esmf.metamodel.ModelElement;
+import org.eclipse.esmf.metamodel.Namespace;
+import org.eclipse.esmf.metamodel.QuantityKind;
+import org.eclipse.esmf.metamodel.QuantityKinds;
+import org.eclipse.esmf.metamodel.Unit;
+import org.eclipse.esmf.metamodel.Units;
+import org.eclipse.esmf.metamodel.datatype.LangString;
+import org.eclipse.esmf.metamodel.impl.DefaultQuantityKind;
+import org.eclipse.esmf.metamodel.impl.DefaultUnit;
+import org.eclipse.esmf.metamodel.vocabulary.SAMM;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
+
+import com.google.common.collect.Streams;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.rdf.model.StmtIterator;
+import org.apache.jena.vocabulary.RDF;
+import org.apache.jena.vocabulary.RDFS;
+
+public class ModelElementFactory extends AttributeValueRetriever {
+ private final Model model;
+ private final Map> instantiators = new HashMap<>();
+ private final Map loadedElements = new HashMap<>();
+ private Set namespaces;
+ private final Function sourceLocator;
+
+ public ModelElementFactory( final Model model, final Map> additionalInstantiators,
+ final Function sourceLocator ) {
+ this.model = model;
+ this.sourceLocator = sourceLocator;
+
+ registerInstantiator( SammNs.SAMM.AbstractEntity(), new AbstractEntityInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.AbstractProperty(), new PropertyInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Aspect(), new AspectInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Characteristic(), new CharacteristicInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Constraint(), new ConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Entity(), new EntityInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Event(), new EventInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Operation(), new OperationInstantiator( this ) );
+ registerInstantiator( SammNs.SAMM.Property(), new PropertyInstantiator( this ) );
+
+ registerInstantiator( SammNs.SAMMC.Code(), new CodeInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Collection(), new CollectionInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Duration(), new DurationInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Either(), new EitherInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.EncodingConstraint(), new EncodingConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Enumeration(), new EnumerationInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.FixedPointConstraint(), new FixedPointConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.LanguageConstraint(), new LanguageConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.LengthConstraint(), new LengthConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.List(), new ListInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.LocaleConstraint(), new LocaleConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Measurement(), new MeasurementInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Quantifiable(), new QuantifiableInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.RangeConstraint(), new RangeConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.RegularExpressionConstraint(), new RegularExpressionConstraintInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Set(), new SetInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.SingleEntity(), new SingleEntityInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.SortedSet(), new SortedSetInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.State(), new StateInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.StructuredValue(), new StructuredValueInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.TimeSeries(), new TimeSeriesInstantiator( this ) );
+ registerInstantiator( SammNs.SAMMC.Trait(), new TraitInstantiator( this ) );
+
+ instantiators.putAll( additionalInstantiators );
+ }
+
+ private void registerInstantiator( final Resource resource, final Instantiator> instantiator ) {
+ instantiators.put( resource, instantiator );
+ }
+
+ @SuppressWarnings( "unchecked" )
+ public T create( final Class clazz, final Resource modelElement ) {
+ ModelElement element = loadedElements.get( modelElement );
+ if ( element != null ) {
+ return (T) element;
+ }
+ final Resource targetType = resourceType( modelElement );
+ if ( SammNs.SAMM.Unit().equals( targetType ) ) {
+ return (T) findOrCreateUnit( modelElement );
+ }
+ if ( SammNs.SAMM.QuantityKind().equals( targetType ) ) {
+ return (T) findOrCreateQuantityKind( modelElement );
+ }
+ final Instantiator instantiator = (Instantiator) instantiators.get( targetType );
+ if ( instantiator != null ) {
+ element = instantiator.apply( modelElement );
+ loadedElements.put( modelElement, element );
+ return (T) element;
+ }
+
+ // No generic instantiator could be found. This means the element is an entity instance
+ if ( !model.contains( targetType, RDF.type, (RDFNode) null ) ) {
+ throw new AspectLoadingException( "Could not load " + modelElement + ": Unknown type " + targetType );
+ }
+ final Entity entity = create( Entity.class, targetType );
+ if ( entity == null ) {
+ throw new AspectLoadingException( "Could not load " + modelElement + ": Expected " + targetType + " to be an Entity" );
+ }
+ return (T) new EntityInstanceInstantiator( this, entity ).apply( modelElement );
+ }
+
+ public QuantityKind findOrCreateQuantityKind( final Resource quantityKindResource ) {
+ final Optional predefinedQuantityKind = QuantityKinds.fromName( quantityKindResource.getLocalName() );
+ return predefinedQuantityKind.orElseGet( () -> new DefaultQuantityKind(
+ createBaseAttributes( quantityKindResource ),
+ attributeValue( quantityKindResource, SammNs.SAMM.preferredName() ).getLiteral().getLexicalForm() ) );
+ }
+
+ public Unit findOrCreateUnit( final Resource unitResource ) {
+ if ( SammNs.UNIT.getNamespace().equals( unitResource.getNameSpace() ) ) {
+ final AspectModelUrn unitUrn = AspectModelUrn.fromUrn( unitResource.getURI() );
+ return Units.fromName( unitUrn.getName() ).orElseThrow( () ->
+ new AspectLoadingException( "Unit definition for " + unitUrn + " is invalid" ) );
+ }
+
+ final Set quantityKinds = Streams.stream(
+ model.listStatements( unitResource, SammNs.SAMM.quantityKind(), (RDFNode) null ) )
+ .map( quantityKindStatement -> findOrCreateQuantityKind( quantityKindStatement.getObject().asResource() ) )
+ .collect( Collectors.toSet() );
+ return new DefaultUnit(
+ createBaseAttributes( unitResource ),
+ optionalAttributeValue( unitResource, SammNs.SAMM.symbol() ).map( Statement::getString ),
+ optionalAttributeValue( unitResource, SammNs.SAMM.commonCode() ).map( Statement::getString ),
+ optionalAttributeValue( unitResource, SammNs.SAMM.referenceUnit() ).map( Statement::getResource ).map( Resource::getLocalName ),
+ optionalAttributeValue( unitResource, SammNs.SAMM.conversionFactor() ).map( Statement::getString ),
+ quantityKinds );
+ }
+
+ private Resource resourceType( final Resource resource ) {
+ final Supplier> directType = () ->
+ optionalAttributeValue( resource, RDF.type ).map( Statement::getResource );
+ final Supplier> propertyUsageType = () ->
+ optionalAttributeValue( resource, SammNs.SAMM.property() ).map( statement -> resourceType( statement.getResource() ) );
+ final Supplier> subClassType = () ->
+ optionalAttributeValue( resource, RDFS.subClassOf ).map( Statement::getResource ).map( this::resourceType );
+ final Supplier> extendsType = () ->
+ optionalAttributeValue( resource, SammNs.SAMM._extends() ).map( Statement::getResource ).map( this::resourceType );
+
+ return Stream.of( directType, propertyUsageType, subClassType, extendsType )
+ .map( Supplier::get )
+ .filter( Optional::isPresent )
+ .map( Optional::get )
+ .findFirst()
+ .orElseThrow( () -> new AspectLoadingException( "Resource " + resource + " has no type" ) );
+ }
+
+ protected Model getModel() {
+ return model;
+ }
+
+ public List getExtendingElements( final List extendingElements ) {
+ return extendingElements.stream().map( urn -> getModel().createResource( urn.toString() ) )
+ .map( loadedElements::get )
+ .filter( Objects::nonNull )
+ .map( ComplexType.class::cast )
+ .collect( Collectors.toList() );
+ }
+
+ /**
+ * Creates an instance for a specific Meta Model element.
+ *
+ * @param modelElement the Aspect model element to be processed.
+ * @return the newly created instance
+ */
+ public MetaModelBaseAttributes createBaseAttributes( final Resource modelElement ) {
+ final AttributeValueRetriever valueRetriever = new AttributeValueRetriever();
+ final Optional urn = getUrn( modelElement );
+ final Set preferredNames = getLanguages( modelElement, SammNs.SAMM.preferredName(), valueRetriever );
+ final Set descriptions = getLanguages( modelElement, SammNs.SAMM.description(), valueRetriever );
+ final List seeValues = getSeeValues( modelElement, valueRetriever );
+ return MetaModelBaseAttributes.builder()
+ .withOptionalUrn( urn )
+ .withPreferredNames( preferredNames )
+ .withDescriptions( descriptions )
+ .withSee( seeValues )
+ .withSourceFile( getSourceLocation( modelElement ) )
+ .build();
+ }
+
+ private static Optional getUrn( final Resource modelElement ) {
+ if ( modelElement.isAnon() ) {
+ final Statement propertyStatement = modelElement.getProperty( SammNs.SAMM.property() );
+ if ( propertyStatement != null ) {
+ return getUrn( propertyStatement.getObject().asResource() );
+ }
+ return Optional.empty();
+ }
+ return Optional.of( AspectModelUrn.fromUrn( modelElement.getURI() ) );
+ }
+
+ /**
+ * @param modelElement the RDF {@link Resource} representing the Aspect Model element to be processed
+ * @param attribute the RDF {@link org.apache.jena.rdf.model.Property} for which the values will be retrieved
+ * @param valueRetriever the {@link AttributeValueRetriever} used to retrieve the attribute values
+ * @return a {@link List} containing all values for the given Property in the given Aspect Model element
+ */
+ private static Set getLanguages( final Resource modelElement,
+ final org.apache.jena.rdf.model.Property attribute, final AttributeValueRetriever valueRetriever ) {
+ return valueRetriever.attributeValues( modelElement, attribute ).stream()
+ .filter( languageStatement -> !"und".equals( Locale.forLanguageTag( languageStatement.getLanguage() ).toLanguageTag() ) )
+ .map( statement -> new LangString( statement.getString(), Locale.forLanguageTag( statement.getLanguage() ) ) )
+ .collect( Collectors.toSet() );
+ }
+
+ /**
+ * @param resource the RDF {@link Resource} representing the Aspect Model element to be processed
+ * @param valueRetriever the {@link AttributeValueRetriever} used to retrieve the attribute values
+ * @return a {@link List} containing all {@link SAMM#see()} values for a Aspect Model element
+ */
+ private static List getSeeValues( final Resource resource, final AttributeValueRetriever valueRetriever ) {
+ return valueRetriever.attributeValues( resource, SammNs.SAMM.see() ).stream()
+ .map( statement -> statement.getObject().toString() )
+ .sorted()
+ .collect( Collectors.toList() );
+ }
+
+ private static String getSyntheticName( final Resource modelElement ) {
+ final Resource namedParent = getNamedParent( modelElement, modelElement.getModel() );
+ if ( namedParent == null ) {
+ throw new AspectLoadingException( "At least one anonymous node in the model does not have a parent with a regular name." );
+ }
+ final String parentModelElementUri = namedParent.getURI();
+ final String parentModelElementName = AspectModelUrn.from( parentModelElementUri )
+ .toJavaOptional()
+ .map( AspectModelUrn::getName )
+ .map( StringUtils::capitalize )
+ .orElse( "" );
+
+ final Resource modelElementType = getModelElementType( modelElement );
+ final String modelElementTypeUri = modelElementType.getURI();
+ final String modelElementTypeName = AspectModelUrn.from( modelElementTypeUri )
+ .toJavaOptional()
+ .map( AspectModelUrn::getName )
+ .orElse( "" );
+
+ return parentModelElementName + modelElementTypeName;
+ }
+
+ // We have to be careful when searching for the parent nodes with a regular name - the "listStatements" API returns the matching nodes
+ // in no particular order; with some very specific models this could lead to non-deterministic behavior.
+ // In the following very simplified example we are looking for ":NumberList" as the parent of "_:blankNode", but could get the
+ // anonymous node [] instead.
+ // [
+ // aux:contains _:blankNode ;
+ // ] .
+ // :NumberList a samm-c:List ;
+ // samm-c:elementCharacteristic _:blankNode .
+ // _:blankNode a samm-c:Trait ;
+ private static Resource getNamedParent( final Resource modelElement, final Model model ) {
+ final StmtIterator elements = model.listStatements( null, null, modelElement );
+ while ( elements.hasNext() ) {
+ final Resource parentModelElement = elements.next().getSubject();
+ if ( parentModelElement.isAnon() ) {
+ final Resource grandParent = getNamedParent( parentModelElement, model );
+ if ( null != grandParent ) {
+ return grandParent;
+ }
+ } else {
+ return parentModelElement;
+ }
+ }
+ return null; // element has no named parent
+ }
+
+ private static Resource getModelElementType( final Resource modelElement ) {
+ final Statement typeStatement = modelElement.getProperty( RDF.type );
+ if ( typeStatement != null ) {
+ return typeStatement.getObject().asResource();
+ }
+
+ // If the model element is a Property reference, the actual type will be found when we follow samm:property
+ final Statement propertyStatement = modelElement.getProperty( SammNs.SAMM.property() );
+ if ( propertyStatement != null ) {
+ return getModelElementType( propertyStatement.getObject().asResource() );
+ }
+
+ // This model element has no type, but maybe it extends another element
+ final Statement extendsStatement = modelElement.getProperty( SammNs.SAMM._extends() );
+ if ( extendsStatement == null ) {
+ throw new AspectLoadingException( "Model element has no type and does not extend another type: " + modelElement );
+ }
+
+ final Resource superElement = extendsStatement.getObject().asResource();
+ return getModelElementType( superElement );
+ }
+
+ public AspectModelFile getSourceLocation( Resource modelElement ) {
+ return sourceLocator.apply( modelElement );
+ }
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/ValueInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ValueInstantiator.java
similarity index 77%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/ValueInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ValueInstantiator.java
index 523b634d5..77b0d83f7 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/ValueInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/ValueInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,34 +11,24 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader;
+package org.eclipse.esmf.aspectmodel.loader;
import java.util.Locale;
import java.util.Optional;
-import java.util.stream.Stream;
-import org.eclipse.esmf.aspectmodel.resolver.services.ExtendedXsdDataType;
import org.eclipse.esmf.metamodel.Scalar;
import org.eclipse.esmf.metamodel.ScalarValue;
-import org.eclipse.esmf.metamodel.datatypes.LangString;
+import org.eclipse.esmf.metamodel.datatype.LangString;
+import org.eclipse.esmf.metamodel.datatype.SammXsdType;
import org.eclipse.esmf.metamodel.impl.DefaultScalar;
import org.eclipse.esmf.metamodel.impl.DefaultScalarValue;
-import org.eclipse.esmf.samm.KnownVersion;
-import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.vocabulary.RDF;
/**
* Creates new instances of {@link ScalarValue} from the value representation in RDF
*/
public class ValueInstantiator {
- private final RDFDatatype curieDataType = new CurieRdfType();
- private final KnownVersion metaModelVersion;
-
- public ValueInstantiator( final KnownVersion metaModelVersion ) {
- this.metaModelVersion = metaModelVersion;
- }
-
/**
* Creates a new scalar value from a lexical value representation.
*
@@ -58,16 +48,16 @@ public Optional buildScalarValue( final String lexicalRepresentatio
return Optional.of( buildLanguageString( lexicalRepresentation, languageTag ) );
}
- return Stream.concat( ExtendedXsdDataType.SUPPORTED_XSD_TYPES.stream(), Stream.of( curieDataType ) )
+ return SammXsdType.ALL_TYPES.stream()
.filter( type -> type.getURI().equals( datatypeUri ) )
.map( type -> type.parse( lexicalRepresentation ) )
- . map( value -> new DefaultScalarValue( value, new DefaultScalar( datatypeUri, metaModelVersion ) ) )
+ . map( value -> new DefaultScalarValue( value, new DefaultScalar( datatypeUri ) ) )
.findAny();
}
public ScalarValue buildLanguageString( final String lexicalRepresentation, final String languageTag ) {
final LangString langString = new LangString( lexicalRepresentation, Locale.forLanguageTag( languageTag ) );
- final Scalar type = new DefaultScalar( RDF.langString.getURI(), metaModelVersion );
+ final Scalar type = new DefaultScalar( RDF.langString.getURI() );
return new DefaultScalarValue( langString, type );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AbstractEntityInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AbstractEntityInstantiator.java
similarity index 72%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AbstractEntityInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AbstractEntityInstantiator.java
index d16d72de5..72603b4e7 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AbstractEntityInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AbstractEntityInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,21 +11,20 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
import org.eclipse.esmf.metamodel.AbstractEntity;
import org.eclipse.esmf.metamodel.ComplexType;
import org.eclipse.esmf.metamodel.Property;
import org.eclipse.esmf.metamodel.impl.DefaultAbstractEntity;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
public class AbstractEntityInstantiator extends ComplexTypeInstantiator {
-
public AbstractEntityInstantiator( final ModelElementFactory modelElementFactory ) {
super( modelElementFactory, AbstractEntity.class );
}
@@ -36,11 +35,6 @@ protected AbstractEntity createDefaultEntity(
final List properties,
final Optional extendedEntity,
final List extendingComplexTypes ) {
- return new DefaultAbstractEntity(
- metaModelBaseAttributes,
- properties,
- extendedEntity,
- extendingComplexTypes,
- modelElementFactory );
+ return new DefaultAbstractEntity( metaModelBaseAttributes, properties, extendedEntity, extendingComplexTypes, modelElementFactory );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AspectInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AspectInstantiator.java
similarity index 75%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AspectInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AspectInstantiator.java
index a4840125a..78a26ff65 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/AspectInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/AspectInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,21 +11,22 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import org.eclipse.esmf.characteristic.Collection;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Aspect;
import org.eclipse.esmf.metamodel.Event;
import org.eclipse.esmf.metamodel.Operation;
import org.eclipse.esmf.metamodel.Property;
+import org.eclipse.esmf.metamodel.characteristic.Collection;
import org.eclipse.esmf.metamodel.impl.DefaultAspect;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -37,11 +38,11 @@ public AspectInstantiator( final ModelElementFactory modelElementFactory ) {
@Override
public Aspect apply( final Resource aspect ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( aspect );
- final List properties = getPropertiesModels( aspect, samm.properties() );
- final List operations = getResourcesFromList( aspect, samm.operations() )
+ final List properties = getPropertiesModels( aspect, SammNs.SAMM.properties() );
+ final List operations = getResourcesFromList( aspect, SammNs.SAMM.operations() )
.map( operation -> modelElementFactory.create( Operation.class, operation ) )
.collect( Collectors.toList() );
- final List events = getResourcesFromList( aspect, samm.events() )
+ final List events = getResourcesFromList( aspect, SammNs.SAMM.events() )
.map( event -> modelElementFactory.create( Event.class, event ) )
.collect( Collectors.toList() );
final boolean isCollectionAspect = properties.stream()
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CharacteristicInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CharacteristicInstantiator.java
similarity index 78%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CharacteristicInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CharacteristicInstantiator.java
index 256062eae..4e7e99d59 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CharacteristicInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CharacteristicInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,16 +11,16 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.impl.DefaultCharacteristic;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CodeInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CodeInstantiator.java
similarity index 67%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CodeInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CodeInstantiator.java
index 84d698ae2..765726e90 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CodeInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CodeInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,14 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
-import org.eclipse.esmf.characteristic.Code;
-import org.eclipse.esmf.characteristic.impl.DefaultCode;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Code;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultCode;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CollectionInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CollectionInstantiator.java
similarity index 74%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CollectionInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CollectionInstantiator.java
index e84a885f8..2f2090171 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/CollectionInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/CollectionInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Collection;
-import org.eclipse.esmf.characteristic.impl.DefaultCollection;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Collection;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultCollection;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ComplexTypeInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ComplexTypeInstantiator.java
similarity index 83%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ComplexTypeInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ComplexTypeInstantiator.java
index f15db8414..58de9f6bb 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ComplexTypeInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ComplexTypeInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,7 +11,7 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.ArrayList;
import java.util.HashMap;
@@ -21,24 +21,24 @@
import java.util.Optional;
import java.util.Set;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
-import org.eclipse.esmf.characteristic.Collection;
import org.eclipse.esmf.metamodel.AbstractEntity;
import org.eclipse.esmf.metamodel.Aspect;
import org.eclipse.esmf.metamodel.ComplexType;
import org.eclipse.esmf.metamodel.Entity;
import org.eclipse.esmf.metamodel.Property;
+import org.eclipse.esmf.metamodel.characteristic.Collection;
import org.eclipse.esmf.metamodel.impl.DefaultAbstractEntity;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.vocabulary.RDF;
public abstract class ComplexTypeInstantiator extends Instantiator {
-
private final Set processedExtendingElements = new HashSet<>();
private final Map creatingElements = new HashMap<>();
@@ -66,41 +66,35 @@ public T apply( final Resource resource ) {
}
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( resource );
- final List properties = getPropertiesModels( resource, samm.properties() );
-
+ final List properties = getPropertiesModels( resource, SammNs.SAMM.properties() );
final Optional extendedEntity = getExtendedEntity( resource );
-
final List extending = new ArrayList<>();
-
final T entity = createDefaultEntity( metaModelBaseAttributes, properties, extendedEntity, extending );
-
creatingElements.put( resource, entity );
-
extending.addAll( getExtending( resource ) );
-
return entity;
}
private List getExtending( final Resource resource ) {
- return model.listSubjectsWithProperty( samm._extends(), resource )
+ return model.listSubjectsWithProperty( SammNs.SAMM._extends(), resource )
.mapWith( extendingComplexType -> attributeValue( extendingComplexType, RDF.type ) ).mapWith( statement -> {
if ( processedExtendingElements.contains( statement.getSubject() ) ) {
return AspectModelUrn.fromUrn( statement.getSubject().getURI() );
}
processedExtendingElements.add( statement.getSubject() );
- if ( samm.AbstractEntity().equals( statement.getObject().asResource() ) ) {
- return modelElementFactory.create( AbstractEntity.class, statement.getSubject() ).getAspectModelUrn().get();
+ if ( SammNs.SAMM.AbstractEntity().equals( statement.getObject().asResource() ) ) {
+ return modelElementFactory.create( AbstractEntity.class, statement.getSubject() ).urn();
}
- return modelElementFactory.create( Entity.class, statement.getSubject() ).getAspectModelUrn().get();
+ return modelElementFactory.create( Entity.class, statement.getSubject() ).urn();
} ).toList();
}
protected Optional getExtendedEntity( final Resource resource ) {
- return optionalAttributeValue( resource, samm._extends() )
+ return optionalAttributeValue( resource, SammNs.SAMM._extends() )
.map( Statement::getResource )
.map( extendedEntityResource -> attributeValue( extendedEntityResource, RDF.type ) )
.map( entityStatement -> {
- if ( samm.AbstractEntity().equals( entityStatement.getObject().asResource() ) ) {
+ if ( SammNs.SAMM.AbstractEntity().equals( entityStatement.getObject().asResource() ) ) {
return modelElementFactory.create( AbstractEntity.class, entityStatement.getSubject() );
}
return modelElementFactory.create( Entity.class, entityStatement.getSubject() );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ConstraintInstantiator.java
similarity index 75%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ConstraintInstantiator.java
index 2babf75da..8a66197f9 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,13 +11,13 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Constraint;
import org.eclipse.esmf.metamodel.impl.DefaultConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/DurationInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/DurationInstantiator.java
similarity index 70%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/DurationInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/DurationInstantiator.java
index 42a141dac..6ee39ed77 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/DurationInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/DurationInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,18 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Duration;
-import org.eclipse.esmf.characteristic.impl.DefaultDuration;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Unit;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Duration;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultDuration;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
@@ -35,7 +36,7 @@ public DurationInstantiator( final ModelElementFactory modelElementFactory ) {
public Duration apply( final Resource duration ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( duration );
final Type type = getType( duration );
- final Optional unit = optionalAttributeValue( duration, sammc.unit() )
+ final Optional unit = optionalAttributeValue( duration, SammNs.SAMMC.unit() )
.map( Statement::getResource )
.map( modelElementFactory::findOrCreateUnit );
return new DefaultDuration( metaModelBaseAttributes, type, unit );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EitherInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EitherInstantiator.java
similarity index 67%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EitherInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EitherInstantiator.java
index c3df3bf8c..d7a4b4747 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EitherInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EitherInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,16 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Either;
-import org.eclipse.esmf.characteristic.impl.DefaultEither;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Either;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultEither;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -33,9 +34,9 @@ public EitherInstantiator( final ModelElementFactory modelElementFactory ) {
public Either apply( final Resource either ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( either );
final Characteristic left = modelElementFactory
- .create( Characteristic.class, attributeValue( either, sammc.left() ).getResource() );
+ .create( Characteristic.class, attributeValue( either, SammNs.SAMMC.left() ).getResource() );
final Characteristic right = modelElementFactory
- .create( Characteristic.class, attributeValue( either, sammc.right() ).getResource() );
+ .create( Characteristic.class, attributeValue( either, SammNs.SAMMC.right() ).getResource() );
return new DefaultEither( metaModelBaseAttributes, Optional.empty(), left, right );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EncodingConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EncodingConstraintInstantiator.java
similarity index 63%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EncodingConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EncodingConstraintInstantiator.java
index 9c1c5161a..9483867a6 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EncodingConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EncodingConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,15 +11,16 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.nio.charset.Charset;
-import org.eclipse.esmf.constraint.EncodingConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultEncodingConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.EncodingConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultEncodingConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -31,7 +32,7 @@ public EncodingConstraintInstantiator( final ModelElementFactory modelElementFac
@Override
public EncodingConstraint apply( final Resource encodingConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( encodingConstraint );
- final String value = encodingConstraint.getProperty( samm.value() ).getObject().toString();
+ final String value = encodingConstraint.getProperty( SammNs.SAMM.value() ).getObject().toString();
final String encoding = value.substring( value.indexOf( '#' ) + 1 );
return new DefaultEncodingConstraint( metaModelBaseAttributes, Charset.forName( encoding ) );
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstanceInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstanceInstantiator.java
similarity index 80%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstanceInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstanceInstantiator.java
index c0db4a2d5..aadde7f9e 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstanceInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstanceInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,12 +11,12 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Entity;
import org.eclipse.esmf.metamodel.EntityInstance;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstantiator.java
similarity index 84%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstantiator.java
index 842d4f5c1..a6eefba9d 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EntityInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EntityInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,18 +11,18 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
import org.eclipse.esmf.metamodel.ComplexType;
import org.eclipse.esmf.metamodel.Entity;
import org.eclipse.esmf.metamodel.Property;
import org.eclipse.esmf.metamodel.impl.DefaultEntity;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
public class EntityInstantiator extends ComplexTypeInstantiator {
public EntityInstantiator( final ModelElementFactory modelElementFactory ) {
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EnumerationInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EnumerationInstantiator.java
similarity index 71%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EnumerationInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EnumerationInstantiator.java
index 582354c3c..6398a7e43 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EnumerationInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EnumerationInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,19 +11,20 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import org.eclipse.esmf.characteristic.Enumeration;
-import org.eclipse.esmf.characteristic.impl.DefaultEnumeration;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Value;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Enumeration;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultEnumeration;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -36,7 +37,7 @@ public EnumerationInstantiator( final ModelElementFactory modelElementFactory )
public Enumeration apply( final Resource enumeration ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( enumeration );
final Type type = getType( enumeration );
- final List enumValues = getNodesFromList( enumeration, sammc.values() )
+ final List enumValues = getNodesFromList( enumeration, SammNs.SAMMC.values() )
.map( node -> buildValue( node, Optional.of( enumeration ), type ) )
.collect( Collectors.toList() );
return new DefaultEnumeration( metaModelBaseAttributes, type, enumValues );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EventInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EventInstantiator.java
similarity index 72%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EventInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EventInstantiator.java
index feda692c7..76aae1810 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/EventInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/EventInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,16 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Event;
import org.eclipse.esmf.metamodel.Property;
import org.eclipse.esmf.metamodel.impl.DefaultEvent;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -32,7 +33,7 @@ public EventInstantiator( final ModelElementFactory modelElementFactory ) {
@Override
public Event apply( final Resource event ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( event );
- final List events = getPropertiesModels( event, samm.parameters() );
+ final List events = getPropertiesModels( event, SammNs.SAMM.parameters() );
return new DefaultEvent( metaModelBaseAttributes, events );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/FixedPointConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/FixedPointConstraintInstantiator.java
similarity index 64%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/FixedPointConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/FixedPointConstraintInstantiator.java
index ea3782671..3936963f8 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/FixedPointConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/FixedPointConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,13 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
-import org.eclipse.esmf.constraint.FixedPointConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultFixedPointConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.FixedPointConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultFixedPointConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -29,8 +30,8 @@ public FixedPointConstraintInstantiator( final ModelElementFactory modelElementF
@Override
public FixedPointConstraint apply( final Resource fixedPointConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( fixedPointConstraint );
- final Integer scale = attributeValue( fixedPointConstraint, sammc.scale() ).getLiteral().getInt();
- final Integer integer = attributeValue( fixedPointConstraint, sammc.integer() ).getLiteral().getInt();
+ final Integer scale = attributeValue( fixedPointConstraint, SammNs.SAMMC.scale() ).getLiteral().getInt();
+ final Integer integer = attributeValue( fixedPointConstraint, SammNs.SAMMC.integer() ).getLiteral().getInt();
return new DefaultFixedPointConstraint( metaModelBaseAttributes, scale, integer );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LanguageConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LanguageConstraintInstantiator.java
similarity index 65%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LanguageConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LanguageConstraintInstantiator.java
index 866253dd0..087128959 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LanguageConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LanguageConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,15 +11,16 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Locale;
-import org.eclipse.esmf.constraint.LanguageConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultLanguageConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.LanguageConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultLanguageConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -31,7 +32,7 @@ public LanguageConstraintInstantiator( final ModelElementFactory modelElementFac
@Override
public LanguageConstraint apply( final Resource languageConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( languageConstraint );
- final String languageCode = attributeValue( languageConstraint, sammc.languageCode() ).getString();
+ final String languageCode = attributeValue( languageConstraint, SammNs.SAMMC.languageCode() ).getString();
return new DefaultLanguageConstraint( metaModelBaseAttributes, Locale.forLanguageTag( languageCode ) );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LengthConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LengthConstraintInstantiator.java
similarity index 69%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LengthConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LengthConstraintInstantiator.java
index 8f3f93f9a..d385de688 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LengthConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LengthConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,16 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.math.BigInteger;
import java.util.Optional;
-import org.eclipse.esmf.constraint.LengthConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultLengthConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.LengthConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultLengthConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Resource;
@@ -34,9 +35,9 @@ public LengthConstraintInstantiator( final ModelElementFactory modelElementFacto
@Override
public LengthConstraint apply( final Resource lengthConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( lengthConstraint );
- final Optional minValue = optionalAttributeValue( lengthConstraint, sammc.minValue() )
+ final Optional minValue = optionalAttributeValue( lengthConstraint, SammNs.SAMMC.minValue() )
.map( Statement::getLiteral ).map( Literal::getLong ).map( BigInteger::valueOf );
- final Optional maxValue = optionalAttributeValue( lengthConstraint, sammc.maxValue() )
+ final Optional maxValue = optionalAttributeValue( lengthConstraint, SammNs.SAMMC.maxValue() )
.map( Statement::getLiteral ).map( Literal::getLong ).map( BigInteger::valueOf );
return new DefaultLengthConstraint( metaModelBaseAttributes, minValue, maxValue );
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ListInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ListInstantiator.java
similarity index 74%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ListInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ListInstantiator.java
index 3fa1eb51d..d37765bd0 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/ListInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/ListInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.List;
-import org.eclipse.esmf.characteristic.impl.DefaultList;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.List;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultList;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LocaleConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LocaleConstraintInstantiator.java
similarity index 65%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LocaleConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LocaleConstraintInstantiator.java
index ab2e3f806..4891412ac 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/LocaleConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/LocaleConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,15 +11,16 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Locale;
-import org.eclipse.esmf.constraint.LocaleConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultLocaleConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.LocaleConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultLocaleConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -31,7 +32,7 @@ public LocaleConstraintInstantiator( final ModelElementFactory modelElementFacto
@Override
public LocaleConstraint apply( final Resource localeConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( localeConstraint );
- final String localeCode = attributeValue( localeConstraint, sammc.localeCode() ).getString();
+ final String localeCode = attributeValue( localeConstraint, SammNs.SAMMC.localeCode() ).getString();
return new DefaultLocaleConstraint( metaModelBaseAttributes, Locale.forLanguageTag( localeCode ) );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/MeasurementInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MeasurementInstantiator.java
similarity index 70%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/MeasurementInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MeasurementInstantiator.java
index 20ec23acc..540d712a0 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/MeasurementInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MeasurementInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,18 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Measurement;
-import org.eclipse.esmf.characteristic.impl.DefaultMeasurement;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Unit;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Measurement;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultMeasurement;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
@@ -35,7 +36,7 @@ public MeasurementInstantiator( final ModelElementFactory modelElementFactory )
public Measurement apply( final Resource measurement ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( measurement );
final Type type = getType( measurement );
- final Optional unit = optionalAttributeValue( measurement, sammc.unit() )
+ final Optional unit = optionalAttributeValue( measurement, SammNs.SAMMC.unit() )
.map( Statement::getResource )
.map( modelElementFactory::findOrCreateUnit );
return new DefaultMeasurement( metaModelBaseAttributes, type, unit );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MetaModelBaseAttributesFactory.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MetaModelBaseAttributesFactory.java
new file mode 100644
index 000000000..c425f8a3b
--- /dev/null
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/MetaModelBaseAttributesFactory.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
+
+public class MetaModelBaseAttributesFactory {
+
+}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/OperationInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/OperationInstantiator.java
similarity index 75%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/OperationInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/OperationInstantiator.java
index f889b537b..68874adc8 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/OperationInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/OperationInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,18 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Operation;
import org.eclipse.esmf.metamodel.Property;
import org.eclipse.esmf.metamodel.impl.DefaultOperation;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
@@ -34,9 +35,9 @@ public OperationInstantiator( final ModelElementFactory modelElementFactory ) {
@Override
public Operation apply( final Resource operation ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( operation );
- final List input = getPropertiesModels( operation, samm.input() );
+ final List input = getPropertiesModels( operation, SammNs.SAMM.input() );
final Optional output =
- optionalAttributeValue( operation, samm.output() )
+ optionalAttributeValue( operation, SammNs.SAMM.output() )
.map( Statement::getResource )
.map( outputPropertyResource -> modelElementFactory
.create( Property.class, outputPropertyResource ) );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/PropertyInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/PropertyInstantiator.java
similarity index 73%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/PropertyInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/PropertyInstantiator.java
index e7a328c2a..119470991 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/PropertyInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/PropertyInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,12 +11,16 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
+import org.eclipse.esmf.aspectmodel.loader.DefaultPropertyWrapper;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.aspectmodel.resolver.exceptions.InvalidModelException;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Property;
@@ -25,11 +29,7 @@
import org.eclipse.esmf.metamodel.impl.DefaultCharacteristic;
import org.eclipse.esmf.metamodel.impl.DefaultProperty;
import org.eclipse.esmf.metamodel.impl.DefaultScalarValue;
-import org.eclipse.esmf.metamodel.loader.DefaultPropertyWrapper;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
-import org.eclipse.esmf.samm.KnownVersion;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.datatypes.BaseDatatype;
import org.apache.jena.rdf.model.Literal;
@@ -43,23 +43,27 @@ public class PropertyInstantiator extends Instantiator {
public PropertyInstantiator( final ModelElementFactory modelElementFactory ) {
super( modelElementFactory, Property.class );
- final MetaModelBaseAttributes characteristicBaseAttributes = MetaModelBaseAttributes.builderFor( "UnnamedCharacteristic" )
- .withMetaModelVersion( KnownVersion.getLatest() )
+ final MetaModelBaseAttributes characteristicBaseAttributes = MetaModelBaseAttributes.builder()
+ .isAnonymous()
.build();
fallbackCharacteristic = new DefaultCharacteristic( characteristicBaseAttributes, Optional.empty() );
}
@Override
public Property apply( final Resource property ) {
- final boolean isOptional = optionalAttributeValue( property, samm.optional() ).map( Statement::getBoolean ).orElse( false );
- final boolean isNotInPayload = optionalAttributeValue( property, samm.notInPayload() ).map( Statement::getBoolean ).orElse( false );
- final Optional payloadName = optionalAttributeValue( property, samm.payloadName() ).map( Statement::getString );
- final Optional extends_ = optionalAttributeValue( property, samm._extends() )
- .map( Statement::getResource )
- .map( superElementResource -> modelElementFactory.create( Property.class, superElementResource ) );
- final boolean isAbstract = property.getModel().contains( property, RDF.type, samm.AbstractProperty() );
+ final boolean isOptional = optionalAttributeValue( property, SammNs.SAMM.optional() ).map( Statement::getBoolean ).orElse( false );
+ final boolean isNotInPayload = optionalAttributeValue( property, SammNs.SAMM.notInPayload() ).map( Statement::getBoolean )
+ .orElse( false );
+ final Optional payloadName = optionalAttributeValue( property, SammNs.SAMM.payloadName() ).map( Statement::getString );
+ final Optional extendsResource = optionalAttributeValue( property, SammNs.SAMM._extends() )
+ .map( Statement::getResource );
+ final Optional extends_ = extendsResource.map( superElementResource ->
+ modelElementFactory.create( Property.class, superElementResource ) );
+ final boolean isAbstract = !property.isAnon() && property.getModel().contains( property, RDF.type, SammNs.SAMM.AbstractProperty() );
- final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( property );
+ final MetaModelBaseAttributes metaModelBaseAttributes = property.isAnon()
+ ? buildBaseAttributes( extendsResource.orElse( property ) )
+ : buildBaseAttributes( property );
final DefaultPropertyWrapper defaultPropertyWrapper = new DefaultPropertyWrapper( metaModelBaseAttributes );
if ( resourcePropertyMap.containsKey( property ) ) {
@@ -71,9 +75,9 @@ public Property apply( final Resource property ) {
defProperty = new DefaultProperty( metaModelBaseAttributes, Optional.of( fallbackCharacteristic ), Optional.empty(), isOptional,
isNotInPayload, payloadName, isAbstract, extends_ );
} else {
- final Resource characteristicResource = attributeValue( property, samm.characteristic() ).getResource();
+ final Resource characteristicResource = attributeValue( property, SammNs.SAMM.characteristic() ).getResource();
final Characteristic characteristic = modelElementFactory.create( Characteristic.class, characteristicResource );
- final Optional exampleValue = optionalAttributeValue( property, samm.exampleValue() )
+ final Optional exampleValue = optionalAttributeValue( property, SammNs.SAMM.exampleValue() )
.flatMap( statement -> characteristic.getDataType()
.map( type -> {
if ( !type.is( Scalar.class ) ) {
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/QuantifiableInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/QuantifiableInstantiator.java
similarity index 70%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/QuantifiableInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/QuantifiableInstantiator.java
index 8d86c8d5d..7589406d3 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/QuantifiableInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/QuantifiableInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,18 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Quantifiable;
-import org.eclipse.esmf.characteristic.impl.DefaultQuantifiable;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Unit;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Quantifiable;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultQuantifiable;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
@@ -35,7 +36,7 @@ public QuantifiableInstantiator( final ModelElementFactory modelElementFactory )
public Quantifiable apply( final Resource quantifiable ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( quantifiable );
final Type type = getType( quantifiable );
- final Optional unit = optionalAttributeValue( quantifiable, sammc.unit() )
+ final Optional unit = optionalAttributeValue( quantifiable, SammNs.SAMMC.unit() )
.map( Statement::getResource )
.map( modelElementFactory::findOrCreateUnit );
return new DefaultQuantifiable( metaModelBaseAttributes, type, unit );
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RangeConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RangeConstraintInstantiator.java
similarity index 72%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RangeConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RangeConstraintInstantiator.java
index 6f55cc7b7..8c8aa7622 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RangeConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RangeConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,19 +11,20 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.constraint.RangeConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultRangeConstraint;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.BoundDefinition;
import org.eclipse.esmf.metamodel.ScalarValue;
-import org.eclipse.esmf.metamodel.impl.BoundDefinition;
+import org.eclipse.esmf.metamodel.constraint.RangeConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultRangeConstraint;
import org.eclipse.esmf.metamodel.impl.DefaultScalar;
import org.eclipse.esmf.metamodel.impl.DefaultScalarValue;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.RDFNode;
@@ -39,18 +40,16 @@ public RangeConstraintInstantiator( final ModelElementFactory modelElementFactor
public RangeConstraint apply( final Resource rangeConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( rangeConstraint );
- final Optional minValue = optionalAttributeValue( rangeConstraint, sammc.minValue() )
+ final Optional minValue = optionalAttributeValue( rangeConstraint, SammNs.SAMMC.minValue() )
.map( Statement::getLiteral )
- .map( literal -> new DefaultScalarValue( literal.getValue(),
- new DefaultScalar( literal.getDatatypeURI(), metaModelBaseAttributes.getMetaModelVersion() ) ) );
- final Optional maxValue = optionalAttributeValue( rangeConstraint, sammc.maxValue() )
+ .map( literal -> new DefaultScalarValue( literal.getValue(), new DefaultScalar( literal.getDatatypeURI() ) ) );
+ final Optional maxValue = optionalAttributeValue( rangeConstraint, SammNs.SAMMC.maxValue() )
.map( Statement::getLiteral )
- .map( literal -> new DefaultScalarValue( literal.getValue(),
- new DefaultScalar( literal.getDatatypeURI(), metaModelBaseAttributes.getMetaModelVersion() ) ) );
+ .map( literal -> new DefaultScalarValue( literal.getValue(), new DefaultScalar( literal.getDatatypeURI() ) ) );
final BoundDefinition lowerBoundDefinition = getBoundDefinitionForRangeValue( minValue,
- sammc.lowerBoundDefinition(), rangeConstraint, BoundDefinition.AT_LEAST );
+ SammNs.SAMMC.lowerBoundDefinition(), rangeConstraint, BoundDefinition.AT_LEAST );
final BoundDefinition upperBoundDefinition = getBoundDefinitionForRangeValue( maxValue,
- sammc.upperBoundDefinition(), rangeConstraint, BoundDefinition.AT_MOST );
+ SammNs.SAMMC.upperBoundDefinition(), rangeConstraint, BoundDefinition.AT_MOST );
return new DefaultRangeConstraint( metaModelBaseAttributes, minValue, maxValue, lowerBoundDefinition, upperBoundDefinition );
}
@@ -63,11 +62,11 @@ public RangeConstraint apply( final Resource rangeConstraint ) {
* @param rangeConstraint the characteristic being processed
* @param defaultBoundDefinitionValue the default value for the bound definition property
* @return in case no value was given for the provided upper or lower bound, the default {@link BoundDefinition#OPEN}
- * is returned.
- * In case a value is given for the provided upper or lower bound and the model does not contain a value for
- * the bound definition property, the provided default {@link BoundDefinition} is returned.
- * In case a value is given for the provided upper or lower bound and the model does provide a value for the
- * bound definition property, provided bound definition value is returned.
+ * is returned.
+ * In case a value is given for the provided upper or lower bound and the model does not contain a value for
+ * the bound definition property, the provided default {@link BoundDefinition} is returned.
+ * In case a value is given for the provided upper or lower bound and the model does provide a value for the
+ * bound definition property, provided bound definition value is returned.
*/
private BoundDefinition getBoundDefinitionForRangeValue( final Optional rangeValue,
final Property boundDefinitionProperty, final Resource rangeConstraint,
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RegularExpressionConstraintInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RegularExpressionConstraintInstantiator.java
similarity index 65%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RegularExpressionConstraintInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RegularExpressionConstraintInstantiator.java
index 20745a2f3..89d898482 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/RegularExpressionConstraintInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/RegularExpressionConstraintInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,13 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
-import org.eclipse.esmf.constraint.RegularExpressionConstraint;
-import org.eclipse.esmf.constraint.impl.DefaultRegularExpressionConstraint;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.constraint.RegularExpressionConstraint;
+import org.eclipse.esmf.metamodel.constraint.impl.DefaultRegularExpressionConstraint;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -29,7 +30,7 @@ public RegularExpressionConstraintInstantiator( final ModelElementFactory modelE
@Override
public RegularExpressionConstraint apply( final Resource regularExpressionConstraint ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( regularExpressionConstraint );
- final String value = attributeValue( regularExpressionConstraint, samm.value() ).getString();
+ final String value = attributeValue( regularExpressionConstraint, SammNs.SAMM.value() ).getString();
return new DefaultRegularExpressionConstraint( metaModelBaseAttributes, value );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SetInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SetInstantiator.java
similarity index 74%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SetInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SetInstantiator.java
index 8f3e8524e..7044eead4 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SetInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SetInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.Set;
-import org.eclipse.esmf.characteristic.impl.DefaultSet;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.Set;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultSet;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SingleEntityInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SingleEntityInstantiator.java
similarity index 68%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SingleEntityInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SingleEntityInstantiator.java
index 502a975f7..fa780dec2 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SingleEntityInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SingleEntityInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,14 +11,14 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
-import org.eclipse.esmf.characteristic.SingleEntity;
-import org.eclipse.esmf.characteristic.impl.DefaultSingleEntity;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.SingleEntity;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultSingleEntity;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SortedSetInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SortedSetInstantiator.java
similarity index 74%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SortedSetInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SortedSetInstantiator.java
index 00d715427..4256e23cb 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/SortedSetInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/SortedSetInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,17 +11,17 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.Optional;
-import org.eclipse.esmf.characteristic.SortedSet;
-import org.eclipse.esmf.characteristic.impl.DefaultSortedSet;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Characteristic;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.SortedSet;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultSortedSet;
import org.apache.jena.rdf.model.Resource;
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StateInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StateInstantiator.java
similarity index 65%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StateInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StateInstantiator.java
index 4ca60b167..e6b647d88 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StateInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StateInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,19 +11,20 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import org.eclipse.esmf.characteristic.State;
-import org.eclipse.esmf.characteristic.impl.DefaultState;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Type;
import org.eclipse.esmf.metamodel.Value;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.State;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultState;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Resource;
@@ -36,10 +37,10 @@ public StateInstantiator( final ModelElementFactory modelElementFactory ) {
public State apply( final Resource state ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( state );
final Type type = getType( state );
- final List enumValues = getNodesFromList( state, sammc.values() )
+ final List enumValues = getNodesFromList( state, SammNs.SAMMC.values() )
.map( node -> buildValue( node, Optional.of( state ), type ) )
.collect( Collectors.toList() );
- final Value defaultValue = buildValue( attributeValue( state, sammc.defaultValue() ).getObject(), Optional.of( state ), type );
+ final Value defaultValue = buildValue( attributeValue( state, SammNs.SAMMC.defaultValue() ).getObject(), Optional.of( state ), type );
return new DefaultState( metaModelBaseAttributes, type, enumValues, defaultValue );
}
}
diff --git a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StructuredValueInstantiator.java b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StructuredValueInstantiator.java
similarity index 74%
rename from core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StructuredValueInstantiator.java
rename to core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StructuredValueInstantiator.java
index 92da3c93d..014649dd2 100644
--- a/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/metamodel/loader/instantiator/StructuredValueInstantiator.java
+++ b/core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/loader/instantiator/StructuredValueInstantiator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -11,18 +11,19 @@
* SPDX-License-Identifier: MPL-2.0
*/
-package org.eclipse.esmf.metamodel.loader.instantiator;
+package org.eclipse.esmf.aspectmodel.loader.instantiator;
import java.util.List;
import java.util.stream.Collectors;
-import org.eclipse.esmf.characteristic.StructuredValue;
-import org.eclipse.esmf.characteristic.impl.DefaultStructuredValue;
+import org.eclipse.esmf.aspectmodel.loader.Instantiator;
+import org.eclipse.esmf.aspectmodel.loader.MetaModelBaseAttributes;
+import org.eclipse.esmf.aspectmodel.loader.ModelElementFactory;
import org.eclipse.esmf.metamodel.Property;
import org.eclipse.esmf.metamodel.Type;
-import org.eclipse.esmf.metamodel.loader.Instantiator;
-import org.eclipse.esmf.metamodel.loader.MetaModelBaseAttributes;
-import org.eclipse.esmf.metamodel.loader.ModelElementFactory;
+import org.eclipse.esmf.metamodel.characteristic.StructuredValue;
+import org.eclipse.esmf.metamodel.characteristic.impl.DefaultStructuredValue;
+import org.eclipse.esmf.metamodel.vocabulary.SammNs;
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.RDFNode;
@@ -36,8 +37,8 @@ public StructuredValueInstantiator( final ModelElementFactory modelElementFactor
@Override
public StructuredValue apply( final Resource structuredValue ) {
final MetaModelBaseAttributes metaModelBaseAttributes = buildBaseAttributes( structuredValue );
- final String deconstructionRule = attributeValue( structuredValue, sammc.deconstructionRule() ).getString();
- final List