package org.opennaas.itests.helpers;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
import org.apache.cxf.jaxrs.client.ProxyClassLoader;
import org.opennaas.core.resources.ILifecycle;
import org.opennaas.core.resources.IResource;
import org.opennaas.core.resources.IResourceManager;
import org.opennaas.core.resources.ResourceException;
import org.opennaas.core.resources.capability.ICapability;
import org.opennaas.core.resources.descriptor.Information;
import org.opennaas.core.resources.descriptor.ResourceDescriptor;
import org.opennaas.core.resources.helpers.ResourceDescriptorFactory;
import org.opennaas.core.resources.protocol.IProtocolManager;
import org.opennaas.core.resources.protocol.IProtocolSessionManager;
import org.opennaas.core.resources.protocol.ProtocolException;
import org.opennaas.core.resources.protocol.ProtocolSessionContext;
public class InitializerTestHelper {
/**
* Stops all resources in give resourceManager
*
* @param resourceManager
* @throws ResourceException
* if fails to stop a resource.
*/
public static void stopResources(IResourceManager resourceManager) throws ResourceException {
for (IResource resource : resourceManager.listResources()) {
resourceManager.stopResource(resource.getResourceIdentifier());
}
}
/**
* Remove all resources from given resourceManager.
*
* It stops active resources prior removing them.
*
* @param resourceManager
* @throws ResourceException
* if fails to remove (or stop) a resource.
*/
public static void removeResources(IResourceManager resourceManager) throws ResourceException {
List<IResource> resources = resourceManager.listResources();
for (int i = resources.size() - 1; i >= 0; i--) {
IResource resource = resources.get(i);
if (resource.getState().equals(ILifecycle.State.ACTIVE))
resourceManager.stopResource(resource.getResourceIdentifier());
resourceManager.removeResource(resource.getResourceIdentifier());
}
}
public static IResource initResource(String name, String type, ArrayList<String> capabilitiesId, IResourceManager resourceManager,
IProtocolManager protocolManager, ProtocolSessionContext context) throws Exception {
IResource resource = null;
ResourceDescriptor resourceDescriptor = ResourceDescriptorFactory
.newResourceDescriptor(name, type, capabilitiesId);
resource = resourceManager.createResource(resourceDescriptor);
// TODO Check this identifier
IProtocolSessionManager protocolSessionManager = protocolManager
.getProtocolSessionManagerWithContext(resource.getResourceIdentifier().getId(), context);
return resource;
}
public static int containsCapability(IResource resource, String idCapability) {
int pos = 0;
for (ICapability capability : resource.getCapabilities()) {
if (capability.getCapabilityInformation().getType().equals(idCapability)) {
return pos;
}
pos++;
}
return -1;
}
public static Information getCapabilityInformation(String type) {
Information information = new Information();
information.setType(type);
return information;
}
public static IProtocolSessionManager addSessionContext(IProtocolManager protocolManager, String resourceId, String resourceURI)
throws ProtocolException {
ProtocolSessionContext protocolSessionContext = new ProtocolSessionContext();
IProtocolSessionManager protocolSessionManager = protocolManager.getProtocolSessionManager(resourceId);
protocolSessionContext.addParameter(
ProtocolSessionContext.PROTOCOL_URI, resourceURI);
protocolSessionContext.addParameter(ProtocolSessionContext.PROTOCOL,
"netconf");
protocolSessionContext.addParameter(ProtocolSessionContext.AUTH_TYPE, "password");
protocolSessionManager.registerContext(protocolSessionContext);
return protocolSessionManager;
}
/**
*
* @param protocolManager
* @param resourceId
* @param resourceURI
* @param protocol
* @param sessionParameters
* ProtocolSessionContext.AUTH_TYPE and other session parameters
* @return
* @throws ProtocolException
*/
public static IProtocolSessionManager addSessionContextWithSessionParams(IProtocolManager protocolManager, String resourceId, String resourceURI,
String protocol, Map<String, Object> sessionParameters) throws ProtocolException {
ProtocolSessionContext protocolSessionContext = new ProtocolSessionContext();
IProtocolSessionManager protocolSessionManager = protocolManager.getProtocolSessionManager(resourceId);
protocolSessionContext.addParameter(
ProtocolSessionContext.PROTOCOL_URI, resourceURI);
protocolSessionContext.addParameter(ProtocolSessionContext.PROTOCOL,
protocol);
protocolSessionContext.getSessionParameters().putAll(sessionParameters);
protocolSessionManager.registerContext(protocolSessionContext);
return protocolSessionManager;
}
/**
* Creates a JAXRSClient with given clientInterface.
*
* @param uri
* the URI where the service is running
* @param clientInterface
* interface class the client should has.
* @param providers
* custom JAX-RS providers
* @param username
* Basic authentication username
* @param password
* Basic authentication password
* @return JAX-RX Client configured with given parameters.
*/
@SuppressWarnings("unchecked")
public static <T> T createRestClient(String uri, Class<T> clientInterface, List<? extends Object> providers, String username, String password) {
ProxyClassLoader classLoader = new ProxyClassLoader();
classLoader.addLoader(clientInterface.getClassLoader());
classLoader.addLoader(JAXRSClientFactoryBean.class.getClassLoader());
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress(uri);
if (providers != null && !providers.isEmpty())
bean.setProviders(providers);
bean.setResourceClass(clientInterface);
bean.setClassLoader(classLoader);
if (username != null && password != null) {
bean.setUsername(username);
bean.setPassword(password);
}
return (T) bean.create();
}
}