package eu.scape_project.planning.repository; import java.io.InputStream; 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; import eu.scape_project.planning.api.RepositoryConnectorApi; import eu.scape_project.planning.utils.RepositoryConnectorException; /** * Client for repositories implementing the SCAPE Dataconnector API. * * * @author Michael Kraxner * */ public class SCAPEDataConnectorClient implements RepositoryConnectorApi { private Client client; private WebResource endpoint; /** * Creates the client for the given endpoint, with the given credentials for HTTP basic authentication. * * @param endpoint * @param user * @param password */ public SCAPEDataConnectorClient(final String endpoint, final String user, final String password){ ClientConfig cc = new DefaultClientConfig(); this.client = Client.create(cc); this.client.addFilter(new HTTPBasicAuthFilter(user, password)); this.endpoint = this.client.resource(endpoint); } /** * {@inheritDoc} */ @Override public String getRepositoryIdentifier() { return this.endpoint.toString(); } /** * {@inheritDoc} */ @Override public InputStream downloadFile(String identifier) throws RepositoryConnectorException{ // /file/<entity-id>/<representation-id>/<file-id>/<version-id> try { String internalIdentifier = identifier.replaceFirst("([\\S]*/)?([^/]+/[^/]+/[^/]+)$", "$2"); return endpoint.path("file/" + internalIdentifier).get(InputStream.class); } catch (Exception e) { throw new RepositoryConnectorException(e); } } }