blob: d73393e0e1c74f9962a8f3dbffc82ef5e9925ebe [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.submodel.metamodel.map.dataspecification;
import java.util.Map;
import org.eclipse.basyx.aas.metamodel.exception.MetamodelConstructionException;
import org.eclipse.basyx.submodel.metamodel.api.dataspecification.IValueReferencePair;
import org.eclipse.basyx.submodel.metamodel.api.qualifier.IIdentifiable;
import org.eclipse.basyx.submodel.metamodel.api.reference.IReference;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyElements;
import org.eclipse.basyx.submodel.metamodel.api.reference.enums.KeyType;
import org.eclipse.basyx.submodel.metamodel.map.reference.Key;
import org.eclipse.basyx.submodel.metamodel.map.reference.Reference;
import org.eclipse.basyx.vab.model.VABModelMap;
/**
* The map implementation for a value reference pair within a value list of the DataSpecificationIEC61360.
* Each value has a global unique id defining its semantic.
*
* @author espen
*
*/
public class ValueReferencePair extends VABModelMap<Object> implements IValueReferencePair {
public static final String VALUE = "value";
public static final String VALUEID = "valueId";
/**
* Constructor
*/
public ValueReferencePair() {}
/**
* Constructs a reference based on an {@link IIdentifiable} and additional
* information (see {@link Key#Key(KeyElements, boolean, String, KeyType)}).
*
* @param identifiable
* @param keyElement
* @param local
*/
public ValueReferencePair(String value, IReference valueId) {
setValue(value);
setValueId(valueId);
}
/**
* Creates a ValueReferencePair object from a map
*
* @param obj
* a ValueReferencePair object as raw map
* @return a ValueReferencePair object, that behaves like a facade for the given map
*/
public static ValueReferencePair createAsFacade(Map<String, Object> map) {
if (map == null) {
return null;
}
if (!isValid(map)) {
throw new MetamodelConstructionException(ValueReferencePair.class, map);
}
ValueReferencePair ret = new ValueReferencePair();
ret.setMap(map);
return ret;
}
/**
* Check whether all mandatory elements for the metamodel
* exist in a map
* @return true/false
*/
@SuppressWarnings("unchecked")
public static boolean isValid(Map<String, Object> map) {
return map != null &&
map.containsKey(VALUE) &&
map.containsKey(VALUEID) &&
Reference.isValid((Map<String, Object>)map.get(VALUEID));
}
@Override
@SuppressWarnings("unchecked")
public IReference getValueId() {
return Reference.createAsFacade((Map<String, Object>) get(VALUEID));
}
@Override
public String getValue() {
return (String) get(VALUE);
}
public void setValueId(IReference valueId) {
put(VALUEID, valueId);
}
public void setValue(String value) {
put(VALUE, value);
}
}