blob: 23c08b1ff6642b13aa0334cdf40b011fcd43c0b4 [file] [log] [blame]
/*
* Copyright (c) 2020 Kentyou.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Kentyou - initial API and implementation
*/
package org.eclipse.sensinact.gateway.core.remote;
import org.eclipse.sensinact.gateway.core.Endpoint;
import org.eclipse.sensinact.gateway.core.Session;
import org.eclipse.sensinact.gateway.core.message.Recipient;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* Extended {@link Endpoint} in charge of connecting a {@link RemoteCore} to the
* local sensiNact instance's {@link Core}
*
* @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
*/
public abstract class LocalEndpoint implements Endpoint {
/**
* Returns the String namespace of the local sensiNact instance this
* LocalEndpoint is connected to
*
* @return the connected local sensiNact's String namespace
*/
public abstract String localNamespace();
/**
* Returns the {@link Session} for the user's String public key passed as
* parameter
*
* @param publicKey
* the user's String public key
*
* @return the {@link Session} for the specified user
*/
public abstract Session getSession(String publicKey);
/**
* Closes the {@link Session} of the user whose String public key passed as
* parameter
*
* @param publicKey
* the user's String public key
*/
public abstract void closeSession(String publicKey);
/**
* @param localAgentId
*/
public abstract void unregisterAgent(String localAgentId);
/**
* Closes this local endpoint
*/
public abstract void close();
private final int localID;
/**
* Constructor
*
* @param localID
* this integer identifier of the LocalEndpoint to be instantiated
*/
public LocalEndpoint(int localID) {
this.localID = localID;
}
/**
* Returns the integer identifier of this LocalEndpoint
*
* @return this LocalEndpoint's integer identifier
*/
public int localID() {
return this.localID;
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getAll(java.lang.String)
*/
@Override
public String getAll(String publicKey) {
return this.getSession(publicKey).getAll().getResponse();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getAll(java.lang.String,
* java.lang.String)
*/
@Override
public String getAll(String publicKey, String filter) {
return this.getSession(publicKey).getAll(filter, null).getResponse();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getProviders(java.lang.String)
*/
@Override
public String getProviders(String publicKey) {
return this.getSession(publicKey).getProviders().getResponse();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getProvider(java.lang.String,
* java.lang.String)
*/
@Override
public String getProvider(String publicKey, String serviceProviderId) {
return this.getSession(publicKey).getProvider(serviceProviderId).getJSON();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getServices(java.lang.String,
* java.lang.String)
*/
@Override
public String getServices(String publicKey, String serviceProviderId) {
return this.getSession(publicKey).getServices(serviceProviderId).getResponse();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getService(java.lang.String,
* java.lang.String, java.lang.String)
*/
@Override
public String getService(String publicKey, String serviceProviderId, String serviceId) {
return this.getSession(publicKey).getService(serviceProviderId, serviceId).getJSON();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getResources(java.lang.String,
* java.lang.String, java.lang.String)
*/
@Override
public String getResources(String publicKey, String serviceProviderId, String serviceId) {
return this.getSession(publicKey).getResources(serviceProviderId, serviceId).getResponse();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#getResource(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public String getResource(String publicKey, String serviceProviderId, String serviceId, String resourceId) {
return this.getSession(publicKey).getResource(serviceProviderId, serviceId, resourceId).getJSON();
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#get(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public JSONObject get(String publicKey, String serviceProviderId, String serviceId, String resourceId,
String attributeId) {
return new JSONObject(
this.getSession(publicKey).get(serviceProviderId, serviceId, resourceId, attributeId).getJSON());
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#set(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String,
* java.lang.Object)
*/
@Override
public JSONObject set(String publicKey, String serviceProviderId, String serviceId, String resourceId,
String attributeId, Object parameter) {
return new JSONObject(this.getSession(publicKey)
.set(serviceProviderId, serviceId, resourceId, attributeId, parameter).getJSON());
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#act(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String,
* java.lang.Object[])
*/
@Override
public JSONObject act(String publicKey, String serviceProviderId, String serviceId, String resourceId,
Object[] parameters) {
return new JSONObject(
this.getSession(publicKey).act(serviceProviderId, serviceId, resourceId, parameters).getJSON());
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#subscribe(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String,
* org.eclipse.sensinact.gateway.core.message.Recipient,
* org.json.JSONArray)
*/
@Override
public JSONObject subscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,
Recipient recipient, JSONArray conditions) {
return new JSONObject(this.getSession(publicKey)
.subscribe(serviceProviderId, serviceId, resourceId, recipient, conditions).getJSON());
}
/**
* @inheritDoc
*
* @see org.eclipse.sensinact.gateway.core.Endpoint#unsubscribe(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public JSONObject unsubscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,
String subscriptionId) {
return new JSONObject(this.getSession(publicKey)
.unsubscribe(serviceProviderId, serviceId, resourceId, subscriptionId).getJSON());
}
}