blob: 6bce5169d0706b62eee21761d8a378239857dac9 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2021 the Eclipse BaSyx Authors
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
******************************************************************************/
package org.eclipse.basyx.testsuite.regression.aas.factory.json;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import org.eclipse.basyx.aas.factory.json.JSONToMetamodelConverter;
import org.eclipse.basyx.aas.factory.json.MetamodelToJSONConverter;
import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
import org.eclipse.basyx.submodel.metamodel.map.SubModel;
import org.eclipse.basyx.submodel.metamodel.map.parts.ConceptDescription;
import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property;
import org.junit.Before;
import org.junit.Test;
/**
* Test for MetamodelToJSONConverter and JSONToMetamodelConverter
*
* @author conradi
*
*/
public class TestJSONConverter {
private String jsonPath = "src/test/resources/aas/factory/json/aasJsonSchemaV2.0.1_Example.json";
private JSONToMetamodelConverter converter;
@Before
public void buildConverter() throws IOException {
String json = new String(Files.readAllBytes(Paths.get(jsonPath)));
converter = new JSONToMetamodelConverter(json);
}
@Test
public void testParseAAS() {
checkAASs(converter.parseAAS());
}
@Test
public void testParseSubmodels() {
checkSubmodels(converter.parseSubmodels());
}
@Test
public void testParseAssets() {
checkAssets(converter.parseAssets());
}
@Test
public void testParseConceptDescriptions() {
checkConceptDescriptions(converter.parseConceptDescriptions());
}
@Test
public void testBuildJSON() {
// Read Metamodel-Objects from JSON-File
List<AssetAdministrationShell> aasList = converter.parseAAS();
List<Asset> assetList = converter.parseAssets();
List<ConceptDescription> conceptDescriptionList = converter.parseConceptDescriptions();
List<SubModel> submodelList = converter.parseSubmodels();
// Convert Metamodel-Objects to JSON
String json = MetamodelToJSONConverter.convertToJSON(aasList, assetList, conceptDescriptionList, submodelList);
// Convert new JSON back to Metamodel-Objects to check them
JSONToMetamodelConverter converter2 = new JSONToMetamodelConverter(json);
// Check if the Metamodel-Objects are still correct
checkAASs(converter2.parseAAS());
checkAssets(converter2.parseAssets());
checkConceptDescriptions(converter2.parseConceptDescriptions());
checkSubmodels(converter2.parseSubmodels());
}
private void checkAASs(List<AssetAdministrationShell> aasList) {
assertEquals(1, aasList.size());
AssetAdministrationShell aas = aasList.get(0);
assertEquals("ExampleMotor", aas.getIdShort());
assertEquals(3, aas.getSubmodelReferences().size());
assertEquals("http://customer.com/aas/9175_7013_7091_9168", aas.getIdentification().getId());
}
private void checkSubmodels(List<SubModel> smList) {
assertEquals(3, smList.size());
SubModel sm = smList.stream().filter(c -> c.getIdShort().equals("TechnicalData")).findAny().get();
assertEquals(1, sm.getSubmodelElements().size());
Property smElement = (Property) sm.getSubmodelElements().get("MaxRotationSpeed");
assertEquals("5000", smElement.get());
}
private void checkAssets(List<Asset> assetList) {
assertEquals(1, assetList.size());
Asset asset = assetList.get(0);
assertEquals("ServoDCMotor", asset.getIdShort());
assertEquals("http://customer.com/assets/KHBVZJSQKIY", asset.getIdentification().getId());
}
private void checkConceptDescriptions(List<ConceptDescription> conceptDescriptionList) {
assertEquals(5, conceptDescriptionList.size());
ConceptDescription cd = conceptDescriptionList.stream()
.filter(c -> c.getIdShort().equals("DigitalFile")).findAny().get();
assertEquals("www.vdi2770.com/blatt1/Entwurf/Okt18/cd/StoredDocumentRepresentation/DigitalFile",
cd.getIdentification().getId());
}
}