package com.constellio.client.cmis.client;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
public class CmisSessionBuilder {
private String appUrl;
private String serviceKey;
private String token;
private String collection;
private boolean cacheEnabled = false;
public static CmisSessionBuilder forAppUrl(String appUrl) {
CmisSessionBuilder builder = new CmisSessionBuilder();
builder.appUrl = appUrl.replace("/atom", "");
return builder;
}
public static CmisSessionBuilder forLogin(String appUrl, String serviceKey, String token, String collection) {
CmisSessionBuilder builder = new CmisSessionBuilder();
builder.appUrl = appUrl.replace("/atom", "");
builder.serviceKey = serviceKey;
builder.token = token;
builder.collection = collection;
return builder;
}
private static void acceptSelfSignedCertificates() {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
}
} };
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection
.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}
}
public CmisSessionBuilder withEnabledCache() {
this.cacheEnabled = true;
return this;
}
public List<Repository> getRepositories() {
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// serviceKey credentials
parameter.put(SessionParameter.USER, serviceKey);
parameter.put(SessionParameter.PASSWORD, token);
// connection settings
parameter.put(SessionParameter.ATOMPUB_URL, appUrl + (appUrl.endsWith("/") ? "" : "/") + "atom");
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.REPOSITORY_ID, collection);
return factory.getRepositories(parameter);
}
public Session build() {
if (serviceKey == null || appUrl == null || token == null || collection == null) {
throw new RuntimeException("serviceKey, appUrl, token and collection parameters required");
}
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// serviceKey credentials
parameter.put(SessionParameter.USER, serviceKey);
parameter.put(SessionParameter.PASSWORD, token);
// connection settings
parameter.put(SessionParameter.ATOMPUB_URL, appUrl + (appUrl.endsWith("/") ? "" : "/") + "atom");
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.REPOSITORY_ID, collection);
acceptSelfSignedCertificates();
Session session = factory.createSession(parameter);
session.getDefaultContext().setMaxItemsPerPage(100000);
session.getDefaultContext().setFilterString("*");
session.getDefaultContext().setCacheEnabled(cacheEnabled);
// Include every properties
session.getDefaultContext().setRenditionFilterString("*");
return session;
}
public CmisSessionBuilder authenticatedBy(String serviceKey, String token) {
this.serviceKey = serviceKey;
this.token = token;
return this;
}
public CmisSessionBuilder onCollection(String collection) {
this.collection = collection;
return this;
}
}