blob: 6157250f873e3eeca5b61854460b9275613cbcfd [file] [log] [blame]
package org.eclipse.basyx.components.service;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
import org.eclipse.basyx.aas.api.registry.IAASRegistryService;
import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager;
import org.eclipse.basyx.components.configuration.ConfigurableComponent;
import org.eclipse.basyx.components.configuration.builder.BaSyxServiceConfigurationBuilder;
import org.eclipse.basyx.sdk.api.service.BaSyxService;
import org.eclipse.basyx.vab.core.VABConnectionManager;
import org.eclipse.basyx.vab.core.proxy.VABElementProxy;
/**
* Abstract base class for BaSyx services. This class implements the necessary interface for BaSyx services and provides basic functionality.
*
* @author kuhn
*
*/
public abstract class BaseBaSyxService implements BaSyxService, ConfigurableComponent<BaSyxServiceConfigurationBuilder<?>> {
/**
* Flag that indicates the request for ending the execution
*/
protected boolean endExecution = false;
/**
* Store device name
*/
protected String name = null;
/**
* Store URN IDs of objects and make them available via shortcuts
*/
protected Map<String, ModelUrn> objectIDs = new HashMap<>();
/**
* VAB connection manager for this service
*/
protected VABConnectionManager connectionManager = null;
/**
* AAS connected manager for this service
*/
protected ConnectedAssetAdministrationShellManager connectedAASManager = null;
/**
* Registry proxy reference that will be used for registering sub models
*/
protected IAASRegistryService registryProxy = null;
/**
* Configure this BaSyx component
*/
@Override @SuppressWarnings({ "rawtypes", "unchecked" })
public BaSyxServiceConfigurationBuilder configure() {
// Create and return BaSyx configuration builder, set configured component to this component
return new BaSyxServiceConfigurationBuilder(this);
}
/**
* Configure this component
*/
@Override
public void configureComponent(BaSyxServiceConfigurationBuilder<?> configuration) {
// Set registry
setRegistry(configuration.getRegistry());
// Create BaSyx connection manager
setConnectionManager(configuration.getConnectionManager());
// Createm BaSyx AAS connected manger
setConnectedAASManager(configuration.getConnetedAASManager());
}
/**
* Check end execution flag of this service
*/
@Override
public boolean hasEnded() {
// Return end execution flag
return endExecution;
}
/**
* Run this service
*/
@Override
public void start() {
// Do nothing
}
/**
* Stop this service
*/
@Override
public void stop() {
// Change flag
endExecution = true;
}
/**
* Change the runnable name
*/
@Override
public BaSyxService setName(String newName) {
// Set name
name = newName;
// Return 'this' reference to enable chaining
return this;
}
/**
* Get runnable name
*/
@Override
public String getName() {
return name;
}
/**
* Wait for completion of all servers
*/
@Override
public void waitFor() {
// Do nothing
}
/**
* Helper function - check if string has prefix
*/
protected boolean hasPrefix(String str, String prefix) {
return str.startsWith(prefix);
}
/**
* Helper function - remove prefix from string
*/
protected String removePrefix(String str, String prefix) {
try {return str.substring(prefix.length()+1);} catch (Exception e) {e.printStackTrace(); return "";}
}
/**
* Add shortcut to object ID mapping
*/
protected void addShortcut(String shortcut, ModelUrn urn) {
objectIDs.put(shortcut, urn);
}
/**
* Remove shortcut to object ID mapping
*/
protected void removeShortcut(String shortcut) {
objectIDs.remove(shortcut);
}
/**
* Lookup object ID based on shortcut
*/
protected ModelUrn lookupURN(String shortcut) {
return objectIDs.get(shortcut);
}
/**
* Clear managed object IDs
*/
protected void clearShortcuts() {
objectIDs.clear();
}
/**
* Set connection manager for this service
*/
protected void setConnectionManager(VABConnectionManager connMngr) {
connectionManager = connMngr;
}
/**
* Set connected AAS manager for this service
*/
public void setConnectedAASManager(ConnectedAssetAdministrationShellManager connectedAASManager) {
this.connectedAASManager = connectedAASManager;
}
/**
* Get connection manager for this service
*/
protected VABConnectionManager getConnectionManager() {
return connectionManager;
}
/**
* Create AAS server connection
*/
protected VABElementProxy createVABConnection(String vabElementID) {
// Create VAB connection
return getConnectionManager().connectToVABElement(vabElementID);
}
/**
* Set AAS registry proxy
*/
protected void setRegistry(IAASRegistryService regProxy) {
registryProxy = regProxy;
}
/**
* Get AAS registry proxy reference
*/
protected IAASRegistryService getRegistry() {
return registryProxy;
}
}