| package org.eclipse.basyx.extensions.aas.registration.mqtt; |
| |
| import java.util.List; |
| |
| import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor; |
| import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor; |
| import org.eclipse.basyx.aas.registration.api.IAASRegistryService; |
| import org.eclipse.basyx.extensions.shared.mqtt.MqttEventService; |
| import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier; |
| import org.eclipse.basyx.vab.exception.provider.ProviderException; |
| import org.eclipse.paho.client.mqttv3.MqttClient; |
| import org.eclipse.paho.client.mqttv3.MqttException; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| /** |
| * Implementation variant for the AASRegistryService that triggers MQTT events for |
| * different operations on the registry. Has to be based on a backend |
| * implementation of the IAASRegistryService to forward its method calls. |
| * |
| * @author haque |
| * |
| */ |
| public class MqttAASRegistryService extends MqttEventService implements IAASRegistryService { |
| private static Logger logger = LoggerFactory.getLogger(MqttAASRegistryService.class); |
| |
| // List of topics |
| public static final String TOPIC_REGISTERAAS = "BaSyxRegistry_registeredAAS"; |
| public static final String TOPIC_REGISTERSUBMODEL = "BaSyxRegistry_registeredSubmodel"; |
| public static final String TOPIC_DELETEAAS = "BaSyxRegistry_deletedAAS"; |
| public static final String TOPIC_DELETESUBMODEL = "BaSyxRegistry_deletedSubmodel"; |
| |
| // The underlying AASRegistryService |
| protected IAASRegistryService observedRegistryService; |
| |
| /** |
| * Constructor for adding this MQTT extension on top of an AASRegistryService |
| * |
| * @param observedRegistryService the underlying registry service |
| * @param serverEndpoint endpoint of mqtt broker |
| * @param clientId unique client identifier |
| * @throws MqttException |
| */ |
| public MqttAASRegistryService(IAASRegistryService observedRegistryService, String serverEndpoint, String clientId) throws MqttException { |
| super(serverEndpoint, clientId); |
| logger.info("Create new MQTT AAS Registry Service for endpoint " + serverEndpoint); |
| this.observedRegistryService = observedRegistryService; |
| } |
| |
| /** |
| * Constructor for adding this MQTT extension on top of an AASRegistryService |
| * |
| * @param observedRegistryService the underlying registry service |
| * @param serverEndpoint endpoint of mqtt broker |
| * @param clientId unique client identifier |
| * @param user username for authentication with broker |
| * @param pw password for authentication with broker |
| * @throws MqttException |
| */ |
| public MqttAASRegistryService(IAASRegistryService observedRegistryService, String serverEndpoint, String clientId, String user, char[] pw) |
| throws MqttException { |
| super(serverEndpoint, clientId, user, pw); |
| logger.info("Create new MQTT AAS Registry Service for endpoint " + serverEndpoint); |
| this.observedRegistryService = observedRegistryService; |
| } |
| |
| /** |
| * Constructor for adding this MQTT extension on top of an AASRegistryService |
| * |
| * @param observedRegistryService the underlying registry service |
| * @param client already configured client |
| * @throws MqttException |
| */ |
| public MqttAASRegistryService(IAASRegistryService observedRegistryService, MqttClient client) throws MqttException { |
| super(client); |
| logger.info("Create new MQTT AAS Registry Service for endpoint " + client.getServerURI()); |
| this.observedRegistryService = observedRegistryService; |
| } |
| |
| |
| @Override |
| public void register(AASDescriptor deviceAASDescriptor) throws ProviderException { |
| this.observedRegistryService.register(deviceAASDescriptor); |
| sendMqttMessage(TOPIC_REGISTERAAS, deviceAASDescriptor.getIdentifier().getId()); |
| } |
| |
| @Override |
| public void register(IIdentifier aas, SubmodelDescriptor smDescriptor) throws ProviderException { |
| this.observedRegistryService.register(aas, smDescriptor); |
| sendMqttMessage(TOPIC_REGISTERSUBMODEL, concatAasSmId(aas, smDescriptor.getIdentifier())); |
| } |
| |
| @Override |
| public void delete(IIdentifier aasId) throws ProviderException { |
| this.observedRegistryService.delete(aasId); |
| sendMqttMessage(TOPIC_DELETEAAS, aasId.getId()); |
| } |
| |
| @Override |
| public void delete(IIdentifier aasId, IIdentifier smId) throws ProviderException { |
| this.observedRegistryService.delete(aasId, smId); |
| sendMqttMessage(TOPIC_DELETESUBMODEL, concatAasSmId(aasId, smId)); |
| } |
| |
| @Override |
| public AASDescriptor lookupAAS(IIdentifier aasId) throws ProviderException { |
| return this.observedRegistryService.lookupAAS(aasId); |
| } |
| |
| @Override |
| public List<AASDescriptor> lookupAll() throws ProviderException { |
| return this.observedRegistryService.lookupAll(); |
| } |
| |
| @Override |
| public List<SubmodelDescriptor> lookupSubmodels(IIdentifier aasId) throws ProviderException { |
| return this.observedRegistryService.lookupSubmodels(aasId); |
| } |
| |
| @Override |
| public SubmodelDescriptor lookupSubmodel(IIdentifier aasId, IIdentifier smId) throws ProviderException { |
| return this.observedRegistryService.lookupSubmodel(aasId, smId); |
| } |
| |
| public static String concatAasSmId(IIdentifier aasId, IIdentifier smId) { |
| return "(" + aasId.getId() + "," + smId.getId() + ")"; |
| } |
| } |