blob: 69ab11e18eaa3edbfad81f8cd2e9ed137d701ddc [file] [log] [blame]
package org.eclipse.basyx.aas.api.registry;
import java.net.URLEncoder;
import java.util.Map;
import org.eclipse.basyx.aas.api.modelurn.ModelUrn;
import org.eclipse.basyx.aas.api.webserviceclient.WebServiceRawClient;
import org.eclipse.basyx.aas.backend.connector.MetaprotocolHandler;
import org.eclipse.basyx.aas.backend.http.tools.GSONTools;
import org.eclipse.basyx.aas.backend.http.tools.factory.DefaultTypeFactory;
import org.eclipse.basyx.aas.metamodel.hashmap.aas.descriptor.AASDescriptor;
import org.eclipse.basyx.aas.metamodel.hashmap.aas.identifier.IdentifierType;
import org.eclipse.basyx.vab.core.IVABDirectoryService;
/**
* Local proxy class that hides HTTP calls to BaSys registry
*
* @author kuhn
*
*/
public class AASHTTPRegistryProxy implements IAASRegistryService, IVABDirectoryService {
/**
* Store AAS registry URL
*/
protected String aasRegistryURL = null;
/**
* Invoke BaSyx service calls via web services
*/
protected WebServiceRawClient client = null;
/**
* JSON serializer
*/
protected GSONTools serializer = null;
/**
* Constructor
*/
public AASHTTPRegistryProxy(String aasRegURL) {
// Store URL
aasRegistryURL = aasRegURL;
// Create web service client
client = new WebServiceRawClient();
// Create serializer
serializer = new GSONTools(new DefaultTypeFactory());
}
/**
* Register AAS descriptor in registry, delete old registration
*/
@Override
public void register(ModelUrn aasID, AASDescriptor deviceAASDescriptor) {
// Invoke delete operation of AAS registry
try {client.delete(aasRegistryURL+"/api/v1/registry/"+URLEncoder.encode(aasID.getURN(), "UTF-8"));} catch (Exception e) {e.printStackTrace();}
// Perform web service call to registry
client.post(aasRegistryURL+"/api/v1/registry", serializer.serialize(deviceAASDescriptor));
}
/**
* Register AAS descriptor in registry
*/
@Override
public void registerOnly(AASDescriptor deviceAASDescriptor) {
// Perform web service call to registry
client.post(aasRegistryURL+"/api/v1/registry", serializer.serialize(deviceAASDescriptor));
}
/**
* Delete AAS descriptor from registry
*/
@Override
public void delete(ModelUrn aasID) {
// Invoke delete operation of AAS registry
try {client.delete(aasRegistryURL+"/api/v1/registry/"+URLEncoder.encode(aasID.getURN(), "UTF-8"));} catch (Exception e) {e.printStackTrace();}
}
/**
* Lookup device AAS
*/
@Override @SuppressWarnings("unchecked")
public AASDescriptor lookupAAS(ModelUrn aasID) {
// Lookup AAS from AAS directory, get AAS descriptor
String jsonResponse = client.get(aasRegistryURL+"/api/v1/registry/"+aasID.getEncodedURN());
// Deserialize AAS descriptor
AASDescriptor aasDescriptor = null;
try {
aasDescriptor = new AASDescriptor((Map<String, Object>) (new MetaprotocolHandler().verify(jsonResponse)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Return AAS descriptor
return aasDescriptor;
}
/**
* Add an AAS mapping to a directory
*
* This function creates an AAS descriptor and registers it in the directory
*/
@Override
public IAASRegistryService addAASMapping(String key, String value) {
// Create AAS descriptor and set ID, ID type, and endpoint
AASDescriptor aasDescriptor = new AASDescriptor(key, IdentifierType.URI, value);
// Push AAS descriptor to server
client.post(aasRegistryURL+"/api/v1/registry", serializer.serialize(aasDescriptor));
// Return 'this' reference
return this;
}
/**
* Delete an AAS mapping
*/
@Override
public void removeMapping(String key) {
// Invoke delete operation of AAS registry
try {client.delete(aasRegistryURL+"/api/v1/registry/"+key);} catch (Exception e) {e.printStackTrace();}
}
/**
* Lookup one AAS mapping
*/
@Override
public String lookup(String id) {
// Lookup AAS from AAS directory, get AAS descriptor
String jsonData = client.get(aasRegistryURL+"/api/v1/registry/"+id);
// Deserialize AAS descriptor
AASDescriptor aasDescriptor = new AASDescriptor((Map<String, Object>) serializer.deserialize(jsonData));
// Return endpoint
return jsonData;
}
/**
* Return all locally registered mappings
*/
@Override
public Map<String, String> getMappings() {
// Currently not implemented
return null;
}
@Override
public IVABDirectoryService addMapping(String key, String value) {
// Currently not implemented
return null;
}
}