using System;
using System.ServiceModel;
using OpenCMISClient.OpenCMISServer;
using System.Net;
namespace OpenCMISClient
{
class CMISClientDemo
{
public void DoStuff()
{
try
{
RepositoryServicePortClient repService = GetRepositoryService("https:, "test", "test");
NavigationServicePortClient navService = GetNavigationService("https:, "test", "test");
ObjectServicePortClient objService = GetObjectService("https:, "test", "test");
cmisRepositoryEntryType[] repositoryEntries = repService.getRepositories(null);
foreach (cmisRepositoryEntryType repositoryEntry in repositoryEntries)
{
Console.WriteLine("Repository: " + repositoryEntry.repositoryName + " (" + repositoryEntry.repositoryId + ")");
cmisRepositoryInfoType repositoryInfo = repService.getRepositoryInfo(repositoryEntry.repositoryId, null);
Console.WriteLine(" Info:");
Console.WriteLine(" Description: " + repositoryInfo.repositoryDescription);
Console.WriteLine(" Product: " + repositoryInfo.vendorName + " / " + repositoryInfo.productName + " " + repositoryInfo.productVersion);
cmisTypeDefinitionListType typeList = repService.getTypeChildren(repositoryInfo.repositoryId, null, true, null, null, null);
Console.WriteLine(" Types:");
foreach (cmisTypeDefinitionType type in typeList.types)
{
Console.WriteLine(" " + type.displayName + " (" + type.id + ")");
}
cmisObjectInFolderListType children = navService.getChildren(repositoryInfo.repositoryId, repositoryInfo.rootFolderId, null, null, true, null, null, false, null, null, null);
Console.WriteLine(" Root folder:");
foreach (cmisObjectInFolderType objInFolder in children.objects)
{
cmisObjectType obj = objInFolder.@object;
String objId = GetIdPropertyValue(obj.properties, "cmis:objectId");
Console.WriteLine(" Name: " + GetStringPropertyValue(obj.properties, "cmis:name") + " (" + objId + ")");
Console.WriteLine(" Type: " + GetIdPropertyValue(obj.properties, "cmis:baseTypeId"));
Console.WriteLine(" Created by: " + GetStringPropertyValue(obj.properties, "cmis:createdBy"));
Console.WriteLine(" Creation date: " + GetDateTimePropertyValue(obj.properties, "cmis:creationDate"));
String baseType = GetIdPropertyValue(obj.properties, "cmis:baseTypeId");
if ("cmis:document".Equals(baseType))
{
Int64? size = GetIntegerPropertyValue(obj.properties, "cmis:contentStreamLength");
Console.WriteLine(" Size: " + size);
cmisContentStreamType content = objService.getContentStream(repositoryInfo.repositoryId, objId, null, null, null, null);
Console.WriteLine(" MIME type: " + content.mimeType);
byte[] bytes = content.stream; Console.WriteLine(" Stream: " + (bytes.Length == size ? "ok" : "mismatch"));
}
}
}
}
catch (FaultException<cmisFaultType> fe)
{
Console.WriteLine("CMIS Exception: " + fe.Detail.message);
Console.WriteLine("Type: " + fe.Detail.type);
Console.WriteLine("Code: " + fe.Detail.code);
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.Message);
Console.WriteLine(e.StackTrace);
}
Console.ReadKey();
}
public RepositoryServicePortClient GetRepositoryService(String wsdlUrl, String user, String password)
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Mtom;
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
RepositoryServicePortClient service = new RepositoryServicePortClient(binding, new EndpointAddress(wsdlUrl));
service.ClientCredentials.UserName.UserName = user;
service.ClientCredentials.UserName.Password = password;
return service;
}
public NavigationServicePortClient GetNavigationService(String wsdlUrl, String user, String password)
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Mtom;
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
NavigationServicePortClient service = new NavigationServicePortClient(binding, new EndpointAddress(wsdlUrl));
service.ClientCredentials.UserName.UserName = user;
service.ClientCredentials.UserName.Password = password;
return service;
}
public ObjectServicePortClient GetObjectService(String wsdlUrl, String user, String password)
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Mtom;
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
binding.TransferMode = TransferMode.Streamed;
ObjectServicePortClient service = new ObjectServicePortClient(binding, new EndpointAddress(wsdlUrl));
service.ClientCredentials.UserName.UserName = user;
service.ClientCredentials.UserName.Password = password;
return service;
}
public String GetStringPropertyValue(cmisPropertiesType properties, String id)
{
String result = null;
foreach (cmisProperty property in properties.Items)
{
if (property.propertyDefinitionId.Equals(id))
{
if (property is cmisPropertyString)
{
result = ((cmisPropertyString)property).value[0];
}
break;
}
}
return result;
}
public String GetIdPropertyValue(cmisPropertiesType properties, String id)
{
String result = null;
foreach (cmisProperty property in properties.Items)
{
if (property.propertyDefinitionId.Equals(id))
{
if (property is cmisPropertyId)
{
result = ((cmisPropertyId)property).value[0];
}
break;
}
}
return result;
}
public Int64? GetIntegerPropertyValue(cmisPropertiesType properties, String id)
{
Int64? result = null;
foreach (cmisProperty property in properties.Items)
{
if (property.propertyDefinitionId.Equals(id))
{
if (property is cmisPropertyInteger)
{
result = Int64.Parse(((cmisPropertyInteger)property).value[0]);
}
break;
}
}
return result;
}
public DateTime? GetDateTimePropertyValue(cmisPropertiesType properties, String id)
{
DateTime? result = null;
foreach (cmisProperty property in properties.Items)
{
if (property.propertyDefinitionId.Equals(id))
{
if (property is cmisPropertyDateTime)
{
result = ((cmisPropertyDateTime)property).value[0];
}
break;
}
}
return result;
}
}
}