DotCMIS: session can be created with authentication provider instance (see CMIS-379)
git-svn-id: https://svn.apache.org/repos/asf/chemistry/dotcmis/trunk@1129229 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/DotCMIS/binding/binding-impl.cs b/DotCMIS/binding/binding-impl.cs
index cabaf63..3021a4b 100644
--- a/DotCMIS/binding/binding-impl.cs
+++ b/DotCMIS/binding/binding-impl.cs
@@ -35,6 +35,11 @@
private BindingRepositoryService repositoryServiceWrapper;
public CmisBinding(IDictionary<string, string> sessionParameters)
+ : this(sessionParameters, null)
+ {
+ }
+
+ public CmisBinding(IDictionary<string, string> sessionParameters, AbstractAuthenticationProvider authenticationProvider)
{
if (sessionParameters == null)
{
@@ -54,20 +59,28 @@
}
// set up authentication provider
- string authenticationProviderClass;
- if (sessionParameters.TryGetValue(SessionParameter.AuthenticationProviderClass, out authenticationProviderClass))
+ if (authenticationProvider == null)
{
- try
+ string authenticationProviderClass;
+ if (sessionParameters.TryGetValue(SessionParameter.AuthenticationProviderClass, out authenticationProviderClass))
{
- Type authProvType = Type.GetType(authenticationProviderClass);
- AbstractAuthenticationProvider authenticationProvider = (AbstractAuthenticationProvider)Activator.CreateInstance(authProvType);
- authenticationProvider.Session = session;
- session.PutValue(BindingSession.AuthenticationProvider, authenticationProvider);
+ try
+ {
+ Type authProvType = Type.GetType(authenticationProviderClass);
+ authenticationProvider = (AbstractAuthenticationProvider)Activator.CreateInstance(authProvType);
+ authenticationProvider.Session = session;
+ session.PutValue(BindingSession.AuthenticationProvider, authenticationProvider);
+ }
+ catch (Exception e)
+ {
+ throw new CmisRuntimeException("Could not load authentictaion provider: " + e.Message, e);
+ }
}
- catch (Exception e)
- {
- throw new CmisRuntimeException("Could not load authentictaion provider: " + e.Message, e);
- }
+ }
+ else
+ {
+ authenticationProvider.Session = session;
+ session.PutValue(BindingSession.AuthenticationProvider, authenticationProvider);
}
// initialize the SPI
diff --git a/DotCMIS/binding/binding-intf.cs b/DotCMIS/binding/binding-intf.cs
index 3318036..3819fc9 100644
--- a/DotCMIS/binding/binding-intf.cs
+++ b/DotCMIS/binding/binding-intf.cs
@@ -218,37 +218,43 @@
}
}
- public ICmisBinding CreateCmisBinding(IDictionary<string, string> sessionParameters)
+ public ICmisBinding CreateCmisBinding(IDictionary<string, string> sessionParameters, AbstractAuthenticationProvider authenticationProvider)
{
CheckSessionParameters(sessionParameters, true);
AddDefaultParameters(sessionParameters);
- return new CmisBinding(sessionParameters);
+ return new CmisBinding(sessionParameters, authenticationProvider);
}
- public ICmisBinding CreateCmisAtomPubBinding(IDictionary<string, string> sessionParameters)
+ public ICmisBinding CreateCmisAtomPubBinding(IDictionary<string, string> sessionParameters, AbstractAuthenticationProvider authenticationProvider)
{
CheckSessionParameters(sessionParameters, false);
sessionParameters[SessionParameter.BindingSpiClass] = BindingSpiAtomPub;
- if (!sessionParameters.ContainsKey(SessionParameter.AuthenticationProviderClass))
+ if (authenticationProvider == null)
{
- sessionParameters[SessionParameter.AuthenticationProviderClass] = StandardAuthenticationProviderClass;
+ if (!sessionParameters.ContainsKey(SessionParameter.AuthenticationProviderClass))
+ {
+ sessionParameters[SessionParameter.AuthenticationProviderClass] = StandardAuthenticationProviderClass;
+ }
}
AddDefaultParameters(sessionParameters);
Check(sessionParameters, SessionParameter.AtomPubUrl);
- return new CmisBinding(sessionParameters);
+ return new CmisBinding(sessionParameters, authenticationProvider);
}
- public ICmisBinding CreateCmisWebServicesBinding(IDictionary<string, string> sessionParameters)
+ public ICmisBinding CreateCmisWebServicesBinding(IDictionary<string, string> sessionParameters, AbstractAuthenticationProvider authenticationProvider)
{
CheckSessionParameters(sessionParameters, false);
sessionParameters[SessionParameter.BindingSpiClass] = BindingSpiWebServices;
- if (!sessionParameters.ContainsKey(SessionParameter.AuthenticationProviderClass))
+ if (authenticationProvider == null)
{
- sessionParameters[SessionParameter.AuthenticationProviderClass] = StandardAuthenticationProviderClass;
+ if (!sessionParameters.ContainsKey(SessionParameter.AuthenticationProviderClass))
+ {
+ sessionParameters[SessionParameter.AuthenticationProviderClass] = StandardAuthenticationProviderClass;
+ }
}
AddDefaultParameters(sessionParameters);
@@ -263,7 +269,7 @@
Check(sessionParameters, SessionParameter.WebServicesRepositoryService);
Check(sessionParameters, SessionParameter.WebServicesVersioningService);
- return new CmisBinding(sessionParameters);
+ return new CmisBinding(sessionParameters, authenticationProvider);
}
// ---- internals ----
diff --git a/DotCMIS/client/client-impl.cs b/DotCMIS/client/client-impl.cs
index e303bbc..cd0a89c 100644
--- a/DotCMIS/client/client-impl.cs
+++ b/DotCMIS/client/client-impl.cs
@@ -45,7 +45,12 @@
public ISession CreateSession(IDictionary<string, string> parameters)
{
- Session session = new Session(parameters);
+ return CreateSession(parameters, null, null, null);
+ }
+
+ public ISession CreateSession(IDictionary<string, string> parameters, IObjectFactory objectFactory, AbstractAuthenticationProvider authenticationProvider, ICache cache)
+ {
+ Session session = new Session(parameters, objectFactory, authenticationProvider, cache);
session.Connect();
return session;
@@ -53,6 +58,11 @@
public IList<IRepository> GetRepositories(IDictionary<string, string> parameters)
{
+ return GetRepositories(parameters, null, null, null);
+ }
+
+ public IList<IRepository> GetRepositories(IDictionary<string, string> parameters, IObjectFactory objectFactory, AbstractAuthenticationProvider authenticationProvider, ICache cache)
+ {
ICmisBinding binding = CmisBindingHelper.CreateBinding(parameters);
IList<IRepositoryInfo> repositoryInfos = binding.GetRepositoryService().GetRepositoryInfos(null);
@@ -60,7 +70,7 @@
IList<IRepository> result = new List<IRepository>();
foreach (IRepositoryInfo data in repositoryInfos)
{
- result.Add(new Repository(data, parameters, this));
+ result.Add(new Repository(data, parameters, this, objectFactory, authenticationProvider, cache));
}
return result;
@@ -74,6 +84,11 @@
{
public static ICmisBinding CreateBinding(IDictionary<string, string> parameters)
{
+ return CreateBinding(parameters, null);
+ }
+
+ public static ICmisBinding CreateBinding(IDictionary<string, string> parameters, AbstractAuthenticationProvider authenticationProvider)
+ {
if (parameters == null)
{
throw new ArgumentNullException("parameters");
@@ -88,36 +103,36 @@
switch (bt)
{
case BindingType.AtomPub:
- return CreateAtomPubBinding(parameters);
+ return CreateAtomPubBinding(parameters, authenticationProvider);
case BindingType.WebServices:
- return CreateWebServiceBinding(parameters);
+ return CreateWebServiceBinding(parameters, authenticationProvider);
case BindingType.Custom:
- return CreateCustomBinding(parameters);
+ return CreateCustomBinding(parameters, authenticationProvider);
default:
throw new CmisRuntimeException("Ambiguous session parameter: " + parameters);
}
}
- private static ICmisBinding CreateCustomBinding(IDictionary<string, string> parameters)
+ private static ICmisBinding CreateCustomBinding(IDictionary<string, string> parameters, AbstractAuthenticationProvider authenticationProvider)
{
CmisBindingFactory factory = CmisBindingFactory.NewInstance();
- ICmisBinding binding = factory.CreateCmisBinding(parameters);
+ ICmisBinding binding = factory.CreateCmisBinding(parameters, authenticationProvider);
return binding;
}
- private static ICmisBinding CreateWebServiceBinding(IDictionary<string, string> parameters)
+ private static ICmisBinding CreateWebServiceBinding(IDictionary<string, string> parameters, AbstractAuthenticationProvider authenticationProvider)
{
CmisBindingFactory factory = CmisBindingFactory.NewInstance();
- ICmisBinding binding = factory.CreateCmisWebServicesBinding(parameters);
+ ICmisBinding binding = factory.CreateCmisWebServicesBinding(parameters, authenticationProvider);
return binding;
}
- private static ICmisBinding CreateAtomPubBinding(IDictionary<string, string> parameters)
+ private static ICmisBinding CreateAtomPubBinding(IDictionary<string, string> parameters, AbstractAuthenticationProvider authenticationProvider)
{
CmisBindingFactory factory = CmisBindingFactory.NewInstance();
- ICmisBinding binding = factory.CreateCmisAtomPubBinding(parameters);
+ ICmisBinding binding = factory.CreateCmisAtomPubBinding(parameters, authenticationProvider);
return binding;
}
@@ -129,20 +144,26 @@
public class Repository : RepositoryInfo, IRepository
{
private IDictionary<string, string> parameters;
- private ISessionFactory sessionFactory;
+ private SessionFactory sessionFactory;
+ private IObjectFactory objectFactory;
+ private AbstractAuthenticationProvider authenticationProvider;
+ private ICache cache;
- public Repository(IRepositoryInfo info, IDictionary<string, string> parameters, ISessionFactory sessionFactory)
+ public Repository(IRepositoryInfo info, IDictionary<string, string> parameters, SessionFactory sessionFactory, IObjectFactory objectFactory, AbstractAuthenticationProvider authenticationProvider, ICache cache)
: base(info)
{
this.parameters = new Dictionary<string, string>(parameters);
this.parameters[SessionParameter.RepositoryId] = Id;
this.sessionFactory = sessionFactory;
+ this.objectFactory = objectFactory;
+ this.authenticationProvider = authenticationProvider;
+ this.cache = cache;
}
public ISession CreateSession()
{
- return sessionFactory.CreateSession(parameters);
+ return sessionFactory.CreateSession(parameters, objectFactory, authenticationProvider, cache);
}
}
@@ -168,6 +189,7 @@
public string RepositoryId { get { return RepositoryInfo.Id; } }
public IObjectFactory ObjectFactory { get; protected set; }
+ protected AbstractAuthenticationProvider AuthenticationProvider { get; set; }
protected ICache Cache { get; set; }
protected bool cachePathOmit;
@@ -200,7 +222,7 @@
}
}
- public Session(IDictionary<string, string> parameters)
+ public Session(IDictionary<string, string> parameters, IObjectFactory objectFactory, AbstractAuthenticationProvider authenticationProvider, ICache cache)
{
if (parameters == null)
{
@@ -209,8 +231,9 @@
this.parameters = parameters;
- ObjectFactory = CreateObjectFactory();
- Cache = CreateCache();
+ ObjectFactory = (objectFactory == null ? CreateObjectFactory() : objectFactory);
+ AuthenticationProvider = authenticationProvider;
+ Cache = (cache == null ? CreateCache() : cache);
string cachePathOmitStr;
if (parameters.TryGetValue(SessionParameter.CachePathOmit, out cachePathOmitStr))
@@ -228,7 +251,7 @@
Lock();
try
{
- Binding = CmisBindingHelper.CreateBinding(parameters);
+ Binding = CmisBindingHelper.CreateBinding(parameters, AuthenticationProvider);
string repositoryId;
if (!parameters.TryGetValue(SessionParameter.RepositoryId, out repositoryId))