package org.easysoa.registry.rest.client;
import java.util.HashSet;
import java.util.Set;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.easysoa.registry.rest.RegistryApi;
import org.easysoa.registry.rest.RegistryJsonApi;
import org.easysoa.registry.rest.RegistryXmlApi;
import org.easysoa.registry.rest.integration.EndpointStateService;
import org.easysoa.registry.rest.integration.SimpleRegistryService;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
public class ClientBuilder {
public static final String LOCAL_NUXEO_URL = "http://localhost:8080/nuxeo/site/";
private Set<Object> singletons;
private String nuxeoUrl = LOCAL_NUXEO_URL;
private String username = "Administrator";
private String password = "Administrator";
public ClientBuilder() {
this.singletons = new HashSet<Object>();
// obsolete, replaced by standard Jackson
//this.singletons.add(new JsonMessageReader());
//this.singletons.add(new JsonMessageWriter());
// Jackson's provider :
//ObjectMapper mapper = new ObjectMapper(); // allows to configure Jackson
JacksonJsonProvider jacksonJsonProvider = new JacksonJsonProvider(/*mapper*/); // from jackson-jaxrs
singletons.add(jacksonJsonProvider);
// JAXB provider :
// using Jersey's default one (Jettison I guess ? or Jackson also ??)
}
public void addSingleton(Object singleton) {
this.singletons.add(singleton);
}
public void setNuxeoSitesUrl(String nuxeoUrl) {
this.nuxeoUrl = nuxeoUrl;
}
public void setCredentials(String username, String password) {
this.username = username;
this.password = password;
}
public ClientConfig constructClientConfig() {
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getSingletons().addAll(this.singletons);
return clientConfig;
}
public WebResource constructNuxeoClientBase() {
return createClient().resource(this.nuxeoUrl);
}
public RegistryApi constructRegistryApi() {
return constructRegistryJsonApi();
}
public RegistryJsonApi constructRegistryJsonApi() {
WebResource client = constructNuxeoClientBase();
return WebResourceFactory.newResource(RegistryJsonApi.class, client);
}
public RegistryXmlApi constructRegistryXmlApi() {
WebResource client = constructNuxeoClientBase();
return WebResourceFactory.newResource(RegistryXmlApi.class, client);
}
public SimpleRegistryService constructSimpleRegistryService() {
WebResource client = constructNuxeoClientBase();
return WebResourceFactory.newResource(SimpleRegistryService.class, client);
}
public EndpointStateService constructEndpointStateService() {
WebResource client = constructNuxeoClientBase();
return WebResourceFactory.newResource(EndpointStateService.class, client);
}
/**
* Creates an all-purpose, authenticated REST HTTP client to Nuxeo
* (prefer specific ones if you can)
* @return
*/
public Client createClient() {
Client client = Client.create(constructClientConfig());
client.addFilter(new HTTPBasicAuthFilter(username, password));
return client;
}
/**
* To be used with createClient()'s all-purpose REST HTTP client
* @return EasySOA Registry service URLs
* @param c
* @return
*/
public String getURL(Class<?> c) {
return this.nuxeoUrl + PathExtractor.getPath(c);
}
/**
* To be used with createClient()'s all-purpose REST HTTP client
* @return EasySOA Registry service URLs
* @param c
* @param methodName
* @param parameterTypes
* @return
* @throws SecurityException
* @throws NoSuchMethodException
*/
public String getURL(Class<?> c, String methodName, Class<?>... parameterTypes) throws SecurityException, NoSuchMethodException {
return this.nuxeoUrl + PathExtractor.getPath(c, methodName, parameterTypes);
}
}