blob: f865d26f68ec7fb2a80bb360e16b862ea50c8a25 [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.metamodel.map;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.eclipse.basyx.aas.metamodel.api.IAasEnv;
import org.eclipse.basyx.aas.metamodel.api.IAssetAdministrationShell;
import org.eclipse.basyx.aas.metamodel.api.parts.asset.IAsset;
import org.eclipse.basyx.aas.metamodel.map.parts.Asset;
import org.eclipse.basyx.submodel.metamodel.api.ISubmodel;
import org.eclipse.basyx.submodel.metamodel.api.parts.IConceptDescription;
import org.eclipse.basyx.submodel.metamodel.map.Submodel;
import org.eclipse.basyx.submodel.metamodel.map.modeltype.ModelType;
import org.eclipse.basyx.submodel.metamodel.map.parts.ConceptDescription;
import org.eclipse.basyx.vab.model.VABModelMap;
/**
* AasEnv class
*
* @author gordt
*/
public class AasEnv extends VABModelMap<Object> implements IAasEnv {
public static final String ASSETS = "assets";
public static final String ASSETADMINISTRATIONSHELLS = "assetAdministrationShells";
public static final String SUBMODELS = "submodels";
public static final String CONCEPTDESCRIPTIONS = "conceptDescriptions";
public static final String MODELTYPE = "AasEnv";
public AasEnv() {
// Add model type
putAll(new ModelType(MODELTYPE));
}
public AasEnv(Collection<IAssetAdministrationShell> aasList, Collection<IAsset> assetList,
Collection<IConceptDescription> conceptDescriptionList, Collection<ISubmodel> submodelList) {
setAssetAdministrationShells(aasList);
setAssets(assetList);
setConceptDescriptions(conceptDescriptionList);
setSubmodels(submodelList);
}
/**
* Creates a AssetAdministrationShell object from a map
*
* @param obj
* a AssetAdministrationShell object as raw map
* @return a AssetAdministrationShell object, that behaves like a facade for the
* given map
*/
@SuppressWarnings("unchecked")
public static AasEnv createAsFacade(Map<String, Object> map) {
if (map == null) {
return null;
}
AasEnv ret = new AasEnv();
Collection<IAsset> assetsTarget = new LinkedList<>();
if (map.get(ASSETS) != null && map.get(ASSETS) instanceof Collection) {
Collection<Map<String, Object>> objectMapCollection = (Collection<Map<String, Object>>) map.get(ASSETS);
for(Map<String, Object> objectMap : objectMapCollection) {
assetsTarget.add(Asset.createAsFacade(objectMap));
}
}
ret.put(ASSETS, assetsTarget);
Collection<IAssetAdministrationShell> aasTarget = new LinkedList<>();
if (map.get(ASSETADMINISTRATIONSHELLS) != null && map.get(ASSETADMINISTRATIONSHELLS) instanceof Collection) {
Collection<Map<String, Object>> objectMapCollection = (Collection<Map<String, Object>>) map.get(ASSETADMINISTRATIONSHELLS);
for(Map<String, Object> objectMap : objectMapCollection) {
aasTarget.add(AssetAdministrationShell.createAsFacade(objectMap));
}
}
ret.put(ASSETADMINISTRATIONSHELLS, aasTarget);
Collection<ISubmodel> submodelsTarget = new LinkedList<>();
if (map.get(SUBMODELS) != null && map.get(SUBMODELS) instanceof Collection) {
Collection<Map<String, Object>> objectMapCollection = (Collection<Map<String, Object>>) map.get(SUBMODELS);
for(Map<String, Object> objectMap : objectMapCollection) {
submodelsTarget.add(Submodel.createAsFacade(objectMap));
}
}
ret.put(SUBMODELS, submodelsTarget);
Collection<IConceptDescription> conceptDescriptionsTarget = new LinkedList<>();
if (map.get(CONCEPTDESCRIPTIONS) != null && map.get(CONCEPTDESCRIPTIONS) instanceof Collection) {
Collection<Map<String, Object>> objectMapCollection = (Collection<Map<String, Object>>) map.get(CONCEPTDESCRIPTIONS);
for(Map<String, Object> objectMap : objectMapCollection) {
conceptDescriptionsTarget.add(ConceptDescription.createAsFacade(objectMap));
}
}
ret.put(CONCEPTDESCRIPTIONS, conceptDescriptionsTarget);
return ret;
}
@SuppressWarnings("unchecked")
@Override
public Collection<IAsset> getAssets() {
List<IAsset> internal = (List<IAsset>) get(ASSETS);
List<IAsset> result = new ArrayList<IAsset>(internal.size());
result.addAll(internal);
return result;
}
public void setAssets(Collection<IAsset> assets) {
put(ASSETS, assets);
}
@SuppressWarnings("unchecked")
@Override
public Collection<IAssetAdministrationShell> getAssetAdministrationShells() {
List<IAssetAdministrationShell> internal = (List<IAssetAdministrationShell>) get(ASSETADMINISTRATIONSHELLS);
List<IAssetAdministrationShell> result = new ArrayList<IAssetAdministrationShell>(internal.size());
result.addAll(internal);
return result;
}
public void setAssetAdministrationShells(Collection<IAssetAdministrationShell> assetAdministrationShells) {
put(ASSETADMINISTRATIONSHELLS, assetAdministrationShells);
}
@SuppressWarnings("unchecked")
@Override
public Collection<ISubmodel> getSubmodels() {
List<ISubmodel> internal = (List<ISubmodel>) get(SUBMODELS);
List<ISubmodel> result = new ArrayList<ISubmodel>(internal.size());
result.addAll(internal);
return result;
}
public void setSubmodels(Collection<ISubmodel> submodels) {
put(SUBMODELS, submodels);
}
@SuppressWarnings("unchecked")
@Override
public Collection<IConceptDescription> getConceptDescriptions() {
List<IConceptDescription> internal = (List<IConceptDescription>) get(CONCEPTDESCRIPTIONS);
List<IConceptDescription> result = new ArrayList<IConceptDescription>(internal.size());
result.addAll(internal);
return result;
}
public void setConceptDescriptions(Collection<IConceptDescription> conceptDescriptions) {
put(CONCEPTDESCRIPTIONS, conceptDescriptions);
}
}