blob: 700b14da4186c2eb1873bafa01955669e3c70fca [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.aas.factory.json;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell;
import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
import org.eclipse.basyx.submodel.metamodel.facade.SubmodelElementMapCollectionConverter;
import org.eclipse.basyx.submodel.metamodel.map.SubModel;
import org.eclipse.basyx.submodel.metamodel.map.parts.ConceptDescription;
import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory;
import org.eclipse.basyx.vab.coder.json.serialization.GSONTools;
/**
* This class can be used to build JSON from Metamodel Objects
*
* @author conradi
*
*/
public class MetamodelToJSONConverter {
public static final String ASSET_ADMINISTRATION_SHELLS = "assetAdministrationShells";
public static final String SUBMODELS = "submodels";
public static final String ASSETS = "assets";
public static final String CONCEPT_DESCRIPTIONS = "conceptDescriptions";
/**
* Builds the JSON for the given metamodel Objects.
* Not required parameters can be null.
*
* @param aasList the AASs to build the JSON for
* @param assetList the Assets to build the JSON for
* @param conceptDescriptionList the ConceptDescriptions to build the JSON for
* @param submodelList the SubModels to build the JSON for
*/
public static String convertToJSON(Collection<AssetAdministrationShell> aasList, Collection<Asset> assetList,
Collection<ConceptDescription> conceptDescriptionList, Collection<SubModel> submodelList) {
// The SubModel-Object holds SubmodelElements in a Map<IdShort, SMElement>
// The JSON-Schema requires the SubmodelElements to be in a List
// This conversion is done by converting the sm to a Map
List<Object> smMapList;
if(submodelList != null) {
smMapList = submodelList.stream()
.map(sm -> SubmodelElementMapCollectionConverter.smToMap(sm)).collect(Collectors.toList());
} else {
smMapList = new ArrayList<>();
}
Map<String, Object> root = new HashMap<>();
root.put(ASSET_ADMINISTRATION_SHELLS, aasList==null ? new ArrayList<AssetAdministrationShell>() : aasList);
root.put(SUBMODELS, smMapList);
root.put(ASSETS, assetList==null ? new ArrayList<Asset>() : assetList);
root.put(CONCEPT_DESCRIPTIONS, conceptDescriptionList==null ? new ArrayList<ConceptDescription>() : conceptDescriptionList);
return new GSONTools(new DefaultTypeFactory()).serialize(root);
}
}