Merge from SEAMIST3

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@10730 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2008-09-04 11:08:13 +00:00
parent a6e263078e
commit 3e303a86d5
16 changed files with 237 additions and 708 deletions

View File

@@ -36,7 +36,9 @@
<cmis:propertyDateTime cmis:name="lastModificationDate">${xmldate(node.properties.modified)}</cmis:propertyDateTime> <cmis:propertyDateTime cmis:name="lastModificationDate">${xmldate(node.properties.modified)}</cmis:propertyDateTime>
<cmis:propertyID cmis:name="objectId">${node.nodeRef}</cmis:propertyID> <cmis:propertyID cmis:name="objectId">${node.nodeRef}</cmis:propertyID>
<cmis:propertyInteger cmis:name="contentStreamLength">${node.properties.content.size}</cmis:propertyInteger> <cmis:propertyInteger cmis:name="contentStreamLength">${node.properties.content.size}</cmis:propertyInteger>
<cmis:propertyString cmis:name="name">${node.name}</cmis:propertyString>
<cmis:propertyString cmis:name="baseType">document</cmis:propertyString> <cmis:propertyString cmis:name="baseType">document</cmis:propertyString>
<cmis:propertyString cmis:name="objectType">document</cmis:propertyString> [#-- TODO --]
<cmis:propertyString cmis:name="createdBy">${node.properties.creator}</cmis:propertyString> <cmis:propertyString cmis:name="createdBy">${node.properties.creator}</cmis:propertyString>
<cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</cmis:propertyString> <cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</cmis:propertyString>
<cmis:propertyString cmis:name="contentStreamMimetype">${node.properties.content.mimetype}</cmis:propertyString> <cmis:propertyString cmis:name="contentStreamMimetype">${node.properties.content.mimetype}</cmis:propertyString>
@@ -125,10 +127,11 @@
<cmis:propertyDateTime cmis:name="lastModificationDate">${xmldate(node.properties.modified)}</cmis:propertyDateTime> <cmis:propertyDateTime cmis:name="lastModificationDate">${xmldate(node.properties.modified)}</cmis:propertyDateTime>
<cmis:propertyID cmis:name="objectId">${node.nodeRef}</cmis:propertyID> <cmis:propertyID cmis:name="objectId">${node.nodeRef}</cmis:propertyID>
<cmis:propertyID cmis:name="parent">${node.parent.nodeRef}</cmis:propertyID> <cmis:propertyID cmis:name="parent">${node.parent.nodeRef}</cmis:propertyID>
<cmis:propertyString cmis:name="name">${node.name}</cmis:propertyString>
<cmis:propertyString cmis:name="objectType">document</cmis:propertyString> [#-- TODO --]
<cmis:propertyString cmis:name="baseType">folder</cmis:propertyString> <cmis:propertyString cmis:name="baseType">folder</cmis:propertyString>
<cmis:propertyString cmis:name="createdBy">${node.properties.creator}</cmis:propertyString> <cmis:propertyString cmis:name="createdBy">${node.properties.creator}</cmis:propertyString>
<cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</cmis:propertyString> <cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</cmis:propertyString>
<cmis:propertyString cmis:name="name">${node.name}</cmis:propertyString>
</cmis:properties> </cmis:properties>
[/#macro] [/#macro]

View File

@@ -26,6 +26,7 @@
<icon>${absurl(url.context)}/images/logo/AlfrescoLogo16.ico</icon> <icon>${absurl(url.context)}/images/logo/AlfrescoLogo16.ico</icon>
<id>urn:uuid:${node.id}</id> <id>urn:uuid:${node.id}</id>
<link rel="self" href="${absurl(encodeuri(url.full))?xml}"/> <link rel="self" href="${absurl(encodeuri(url.full))?xml}"/>
<link rel="cmis-source" href="${absurl(url.serviceContext)}/api/node/${node.nodeRef.storeRef.protocol}/${node.nodeRef.storeRef.identifier}/${node.nodeRef.id}"/>
[#nested] [#-- NOTE: Custom links --] [#nested] [#-- NOTE: Custom links --]
<title>${node.name}</title> <title>${node.name}</title>
<updated>${xmldate(node.properties.modified)}</updated> <updated>${xmldate(node.properties.modified)}</updated>

View File

@@ -19,9 +19,10 @@
<cmis:capabilityVersionSpecificFiling>false</cmis:capabilityVersionSpecificFiling> <cmis:capabilityVersionSpecificFiling>false</cmis:capabilityVersionSpecificFiling>
<cmis:capabilityPWCUpdateable>true</cmis:capabilityPWCUpdateable> <cmis:capabilityPWCUpdateable>true</cmis:capabilityPWCUpdateable>
<cmis:capabilityAllVersionsSearchable>false</cmis:capabilityAllVersionsSearchable> <cmis:capabilityAllVersionsSearchable>false</cmis:capabilityAllVersionsSearchable>
<cmis:capabilityJoin>innerAndOuter</cmis:capabilityJoin> <#-- TODO: check --> <cmis:capabilityJoin>noJoin</cmis:capabilityJoin>
<cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText> <cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText>
</cmis:capabilities> </cmis:capabilities>
<cmis:cmisVersionsSupported>${cmisVersion}</cmis:cmisVersionsSupported>
<cmis:repositorySpecificInformation></cmis:repositorySpecificInformation> <cmis:repositorySpecificInformation></cmis:repositorySpecificInformation>
</cmis:repositoryInfo> </cmis:repositoryInfo>

View File

@@ -2,6 +2,7 @@
<shortname>Repository AtomPub Service Document</shortname> <shortname>Repository AtomPub Service Document</shortname>
<description>Repository ATOM Publishing Service Document</description> <description>Repository ATOM Publishing Service Document</description>
<url>/api/repository</url> <url>/api/repository</url>
<url>/api/cmis</url>
<format default="atom"/> <format default="atom"/>
<authentication>none</authentication> <authentication>none</authentication>
<family>CMIS</family> <family>CMIS</family>

View File

@@ -0,0 +1,63 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Alfresco CMIS v${cmisVersion}</title>
<link rel="stylesheet" href="${url.context}/css/base.css" TYPE="text/css">
</head>
<body>
<table>
<tr>
<td><img src="${url.context}/images/logo/AlfrescoLogo32.png" alt="Alfresco" /></td>
<td><nobr><span class="title">Alfresco CMIS v${cmisVersion} (REST Binding)</span></nobr></td>
</tr>
</table>
<br>
<table>
<tr><td><a href="${url.serviceContext}/index">Back to Web Scripts Home</a></td></tr>
</table>
<br>
<span class="mainSubTitle">Introduction</span>
<table>
<tr>
<td>The Content Management Interoperability Services (CMIS) standard defines a domain
model and set of API bindings, such as Web Services and REST/Atom that can be used
by applications to work with one or more Content Management repositories/systems.</td>
</tr>
</table>
<br>
<span class="mainSubTitle">REST Binding</span>
<table>
<tr><td>Alfresco's Content Repository provides the CMIS REST binding, an extension of the Atom Publishing Protocol.
All CMIS services are implemented as <a href="http://wiki.alfresco.com/wiki/Web Scripts">Web Scripts</a>,
therefore support all Web Script capabilities such as authentication, content negotiation, tunelling etc.</td></tr>
</table>
<br>
<span class="mainSubTitle">CMIS Services</span>
<table>
<tr><td>A description of each CMIS service is available in the <a href="${url.serviceContext}/index/family/CMIS">reference documentation.</a></td></tr>
</table>
<br>
<span class="mainSubTitle">CMIS Repository Information</span>
<table>
<tr><td>(also available as an <a href="${url.serviceContext}/api/repository">APP Service Document</a>)</td></tr>
</table>
<br>
<table>
<tr><td>Repository Id:</td><td>${server.id}</td></tr>
<tr><td>Repository Name:</td><td>${server.name}</td></tr>
<tr><td>Repository Description:</td><td>[none]</td></tr>
<tr><td>Vendor Name:</td><td>Alfresco</td></tr>
<tr><td>Product Name:</td><td>Alfresco Repository (${server.edition})</td></tr>
<tr><td>Product Version:</td><td>${server.version}</td></tr>
<tr><td>Multifiling:</td><td>true</td></tr>
<tr><td>Unfiling:</td><td>false</td></tr>
<tr><td>VersionSpecificFiling:</td><td>false</td></tr>
<tr><td>PWCUpdateable:</td><td>true</td></tr>
<tr><td>AllVersionsSearchable:</td><td>false</td></tr>
<tr><td>Join:</td><td>noJoin</td></tr>
<tr><td>FullText:</td></td><td>fulltextandstructured</td></tr>
<tr><td>VersionsSupported:</td><td>${cmisVersion}</td></tr>
<tr><td>repositorySpecificInformation:</td><td>[none]</td></tr>
</table>
</body>
</html>

View File

@@ -1 +1,2 @@
model.cmisVersion = cmis.version;
model.defaultRootFolderPath = cmis.defaultRootFolderPath; model.defaultRootFolderPath = cmis.defaultRootFolderPath;

View File

@@ -10,7 +10,6 @@
[@feedLib.node node=node] [@feedLib.node node=node]
[@pagingLib.links cursor=cursor/] [@pagingLib.links cursor=cursor/]
[@entryLib.folderCMISLinks node=node/] [#-- TODO: not part of 0.42 schema --]
[/@feedLib.node] [/@feedLib.node]
[#list results as child] [#list results as child]
@@ -24,7 +23,6 @@
[/#list] [/#list]
[@feedLib.hasMore more=cursor/] [@feedLib.hasMore more=cursor/]
[@entryLib.folderCMISProps node=node/] [#-- TODO: not part of 0.42 schema --]
[@pagingLib.opensearch cursor=cursor/] [@pagingLib.opensearch cursor=cursor/]
</feed> </feed>

View File

@@ -394,20 +394,11 @@
<property name="extensionName"><value>cmis</value></property> <property name="extensionName"><value>cmis</value></property>
<property name="serviceRegistry" ref="ServiceRegistry" /> <property name="serviceRegistry" ref="ServiceRegistry" />
<property name="repository" ref="repositoryHelper" /> <property name="repository" ref="repositoryHelper" />
<property name="CMISService" ref="webscripts.cmis.service" /> <property name="CMISService" ref="CMISService" />
<property name="paging" ref="webscripts.js.paging" /> <property name="paging" ref="webscripts.js.paging" />
</bean> </bean>
<!-- CMIS Helpers --> <!-- CMIS Helpers -->
<bean id="webscripts.cmis.service" class="org.alfresco.repo.cmis.rest.CMISService">
<property name="defaultRootPath"><value>workspace/SpacesStore/Company Home</value></property>
<property name="dictionaryService" ref="dictionaryService" />
<property name="searchService" ref="searchService" />
<property name="transactionHelper" ref="retryingTransactionHelper" />
<property name="tenantDeployerService" ref="tenantAdminService" />
<property name="nodeService" ref="nodeService" />
<property name="repository" ref="repositoryHelper" />
</bean>
<bean id="webscripts.cmis.atom.extension" class="org.alfresco.web.scripts.atom.AbderaExtension"> <bean id="webscripts.cmis.atom.extension" class="org.alfresco.web.scripts.atom.AbderaExtension">
<property name="abderaService" ref="webscripts.abdera"/> <property name="abderaService" ref="webscripts.abdera"/>

View File

@@ -24,7 +24,8 @@
*/ */
package org.alfresco.repo.cmis.rest; package org.alfresco.repo.cmis.rest;
import org.alfresco.repo.cmis.rest.CMISService.TypesFilter; import org.alfresco.cmis.CMISService;
import org.alfresco.cmis.CMISService.TypesFilter;
import org.alfresco.repo.jscript.BaseScopableProcessorExtension; import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.repo.jscript.ScriptNode; import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.repo.model.Repository; import org.alfresco.repo.model.Repository;
@@ -91,6 +92,16 @@ public class CMISScript extends BaseScopableProcessorExtension
this.cmisService = cmisService; this.cmisService = cmisService;
} }
/**
* Gets the supported CMIS Version
*
* @return CMIS version
*/
public String getVersion()
{
return cmisService.getCMISVersion();
}
/** /**
* Gets the default root folder path * Gets the default root folder path
* *

View File

@@ -1,440 +0,0 @@
/*
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.cmis.rest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.model.Repository;
import org.alfresco.repo.search.QueryParameterDefImpl;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.TenantDeployer;
import org.alfresco.repo.tenant.TenantDeployerService;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.QueryParameterDefinition;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.AbstractLifecycleBean;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
/**
* CMIS Service
*
* @author davidc
*/
public class CMISService implements ApplicationContextAware, ApplicationListener, TenantDeployer
{
/**
* Types Filter
*
* @author davidc
*/
public enum TypesFilter
{
Folders,
FoldersAndDocuments,
Documents
};
/** Query Parameters */
private static final QName PARAM_PARENT = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "parent");
private static final QName PARAM_USERNAME = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "username");
/** Shallow search for all files and folders */
private static final String LUCENE_QUERY_SHALLOW_FOLDERS =
"+PARENT:\"${cm:parent}\" " +
"-TYPE:\"" + ContentModel.TYPE_SYSTEM_FOLDER + "\" " +
"+TYPE:\"" + ContentModel.TYPE_FOLDER + "\"";
/** Shallow search for all files and folders */
private static final String LUCENE_QUERY_SHALLOW_FILES =
"+PARENT:\"${cm:parent}\" " +
"-TYPE:\"" + ContentModel.TYPE_SYSTEM_FOLDER + "\" " +
"+TYPE:\"" + ContentModel.TYPE_CONTENT + "\" " +
"-ASPECT:\"" + ContentModel.ASPECT_WORKING_COPY + "\"";
private static final String LUCENE_QUERY_CHECKEDOUT =
"+@cm\\:workingCopyOwner:${cm:username}";
private static final String LUCENE_QUERY_CHECKEDOUT_IN_FOLDER =
"+@cm\\:workingCopyOwner:${cm:username} " +
"+PARENT:\"${cm:parent}\"";
// dependencies
private Repository repository;
private RetryingTransactionHelper retryingTransactionHelper;
private DictionaryService dictionaryService;
private SearchService searchService;
private NodeService nodeService;
private TenantDeployerService tenantDeployerService;
private ProcessorLifecycle lifecycle = new ProcessorLifecycle();
// default CMIS store and path
private String defaultRootPath;
private Map<String, NodeRef> defaultRootNodeRefs;
// data types for query
private DataTypeDefinition nodeRefDataType;
private DataTypeDefinition textDataType;
/**
* Sets the default root path
*
* store_type/store_id/path...
*
* @param path store_type/store_id/path...
*/
public void setDefaultRootPath(String path)
{
defaultRootPath = path;
}
/**
* Sets the tenant deployer service
*
* @param tenantDeployerService
*/
public void setTenantDeployerService(TenantDeployerService tenantDeployerService)
{
this.tenantDeployerService = tenantDeployerService;
}
/**
* Sets helper that provides transaction callbacks
*/
public void setTransactionHelper(RetryingTransactionHelper retryingTransactionHelper)
{
this.retryingTransactionHelper = retryingTransactionHelper;
}
/**
* @param dictionaryService
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/**
* @param searchService
*/
public void setSearchService(SearchService searchService)
{
this.searchService = searchService;
}
/**
* @param nodeService
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/**
* @param repository
*/
public void setRepository(Repository repository)
{
this.repository = repository;
}
/* (non-Javadoc)
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
lifecycle.setApplicationContext(applicationContext);
}
/* (non-Javadoc)
* @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
*/
public void onApplicationEvent(ApplicationEvent event)
{
lifecycle.onApplicationEvent(event);
}
/**
* Hooks into Spring Application Lifecycle
*/
private class ProcessorLifecycle extends AbstractLifecycleBean
{
@Override
protected void onBootstrap(ApplicationEvent event)
{
init();
}
@Override
protected void onShutdown(ApplicationEvent event)
{
}
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#onEnableTenant()
*/
public void onEnableTenant()
{
init();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#onDisableTenant()
*/
public void onDisableTenant()
{
destroy();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#init()
*/
public void init()
{
// initialise data types
nodeRefDataType = dictionaryService.getDataType(DataTypeDefinition.NODE_REF);
textDataType = dictionaryService.getDataType(DataTypeDefinition.TEXT);
// initialise root node ref
tenantDeployerService.register(this);
if (defaultRootNodeRefs == null)
{
defaultRootNodeRefs = new HashMap<String, NodeRef>(1);
}
getDefaultRootNodeRef();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#destroy()
*/
public void destroy()
{
defaultRootNodeRefs.remove(tenantDeployerService.getCurrentUserDomain());
}
/**
* Gets the default root node path
*
* @return root node path
*/
public String getDefaultRootPath()
{
return defaultRootPath;
}
/**
* Gets the default root node ref
*
* @return root node ref
*/
public NodeRef getDefaultRootNodeRef()
{
String tenantDomain = tenantDeployerService.getCurrentUserDomain();
NodeRef defaultNodeRef = defaultRootNodeRefs.get(tenantDomain);
if (defaultNodeRef == null)
{
defaultNodeRef = AuthenticationUtil.runAs(new RunAsWork<NodeRef>()
{
public NodeRef doWork() throws Exception
{
return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<NodeRef>()
{
public NodeRef execute() throws Exception
{
return repository.findNodeRef("path", defaultRootPath.split("/"));
};
});
}
}, AuthenticationUtil.getSystemUserName());
if (defaultNodeRef == null)
{
throw new AlfrescoRuntimeException("Default root folder path '" + defaultRootPath + "' not found");
}
defaultRootNodeRefs.put(tenantDomain, defaultNodeRef);
}
return defaultNodeRef;
}
/**
* Gets the default store ref
*
* @return store ref
*/
public StoreRef getDefaultRootStoreRef()
{
return getDefaultRootNodeRef().getStoreRef();
}
/**
* Query for node children
*
* @param parent node to query children for
* @param typesFilter types filter
* @return children of node
*/
public NodeRef[] getChildren(NodeRef parent, TypesFilter typesFilter)
{
if (typesFilter == TypesFilter.FoldersAndDocuments)
{
NodeRef[] folders = queryChildren(parent, TypesFilter.Folders);
NodeRef[] docs = queryChildren(parent, TypesFilter.Documents);
NodeRef[] foldersAndDocs = new NodeRef[folders.length + docs.length];
System.arraycopy(folders, 0, foldersAndDocs, 0, folders.length);
System.arraycopy(docs, 0, foldersAndDocs, folders.length, docs.length);
return foldersAndDocs;
}
else if (typesFilter == TypesFilter.Folders)
{
NodeRef[] folders = queryChildren(parent, TypesFilter.Folders);
return folders;
}
else if (typesFilter == TypesFilter.Documents)
{
NodeRef[] docs = queryChildren(parent, TypesFilter.Documents);
return docs;
}
return new NodeRef[0];
}
/**
* Query for checked out items
*
* @param username for user
* @param folder (optional) within folder
* @param includeDescendants true => include descendants of folder, false => only children of folder
* @return checked out items
*/
public NodeRef[] getCheckedOut(String username, NodeRef folder, boolean includeDescendants)
{
SearchParameters params = new SearchParameters();
params.setLanguage(SearchService.LANGUAGE_LUCENE);
QueryParameterDefinition usernameDef = new QueryParameterDefImpl(PARAM_USERNAME, textDataType, true, username);
params.addQueryParameterDefinition(usernameDef);
if (folder == null)
{
// get all checked-out items
params.setQuery(LUCENE_QUERY_CHECKEDOUT);
params.addStore(getDefaultRootStoreRef());
}
else
{
// get all checked-out items within folder
// NOTE: special-case for all descendants in root folder (treat as all checked-out items)
if (includeDescendants && nodeService.getRootNode(folder.getStoreRef()) == folder)
{
// get all checked-out items within specified folder store
params.setQuery(LUCENE_QUERY_CHECKEDOUT);
params.addStore(folder.getStoreRef());
}
else
{
// TODO: implement descendants of folder
params.setQuery(LUCENE_QUERY_CHECKEDOUT_IN_FOLDER);
params.addStore(folder.getStoreRef());
QueryParameterDefinition parentDef = new QueryParameterDefImpl(PARAM_PARENT, nodeRefDataType, true, folder.toString());
params.addQueryParameterDefinition(parentDef);
}
}
ResultSet resultSet = null;
try
{
resultSet = searchService.query(params);
List<NodeRef> results = resultSet.getNodeRefs();
NodeRef[] nodeRefs = new NodeRef[results.size()];
return results.toArray(nodeRefs);
}
finally
{
if (resultSet != null) resultSet.close();
}
}
/**
* Query children helper
*
* NOTE: Queries for folders only or documents only
*
* @param parent node to query children for
* @param typesFilter folders or documents
* @return node children
*/
private NodeRef[] queryChildren(NodeRef parent, TypesFilter typesFilter)
{
SearchParameters params = new SearchParameters();
params.setLanguage(SearchService.LANGUAGE_LUCENE);
params.addStore(parent.getStoreRef());
QueryParameterDefinition parentDef = new QueryParameterDefImpl(PARAM_PARENT, nodeRefDataType, true, parent.toString());
params.addQueryParameterDefinition(parentDef);
if (typesFilter == TypesFilter.Folders)
{
params.setQuery(LUCENE_QUERY_SHALLOW_FOLDERS);
}
else if (typesFilter == TypesFilter.Documents)
{
params.setQuery(LUCENE_QUERY_SHALLOW_FILES);
}
ResultSet resultSet = null;
try
{
resultSet = searchService.query(params);
List<NodeRef> results = resultSet.getNodeRefs();
NodeRef[] nodeRefs = new NodeRef[results.size()];
return results.toArray(nodeRefs);
}
finally
{
if (resultSet != null) resultSet.close();
}
}
}

View File

@@ -473,10 +473,7 @@ public class CMISTest extends BaseCMISWebScriptTest
{ {
// retrieve test folder for checkouts // retrieve test folder for checkouts
Entry testFolder = createTestFolder("testGetCheckedOut"); Entry testFolder = createTestFolder("testGetCheckedOut");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); CMISProperties props = testFolder.getExtension(CMISConstants.PROPERTIES);
Feed scope = getFeed(childrenLink.getHref());
assertNotNull(scope);
CMISProperties props = scope.getExtension(CMISConstants.PROPERTIES);
String scopeId = props.getObjectId(); String scopeId = props.getObjectId();
assertNotNull(scopeId); assertNotNull(scopeId);
@@ -497,10 +494,9 @@ public class CMISTest extends BaseCMISWebScriptTest
// retrieve test folder for checkouts // retrieve test folder for checkouts
Entry testFolder = createTestFolder("testCheckout"); Entry testFolder = createTestFolder("testCheckout");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
Feed scope = getFeed(childrenLink.getHref());
// create document for checkout // create document for checkout
Entry document = createDocument(scope.getSelfLink().getHref(), "testCheckout"); Entry document = createDocument(childrenLink.getHref(), "testCheckout");
Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator()); Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator());
assertNotNull(documentRes); assertNotNull(documentRes);
String documentXML = documentRes.getContentAsString(); String documentXML = documentRes.getContentAsString();
@@ -528,10 +524,9 @@ public class CMISTest extends BaseCMISWebScriptTest
// retrieve test folder for checkouts // retrieve test folder for checkouts
Entry testFolder = createTestFolder("testCancelCheckout"); Entry testFolder = createTestFolder("testCancelCheckout");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
Feed scope = getFeed(childrenLink.getHref());
// create document for checkout // create document for checkout
Entry document = createDocument(scope.getSelfLink().getHref(), "testCancelCheckout"); Entry document = createDocument(childrenLink.getHref(), "testCancelCheckout");
Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator()); Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator());
assertNotNull(documentRes); assertNotNull(documentRes);
String xml = documentRes.getContentAsString(); String xml = documentRes.getContentAsString();
@@ -574,10 +569,9 @@ public class CMISTest extends BaseCMISWebScriptTest
// retrieve test folder for checkins // retrieve test folder for checkins
Entry testFolder = createTestFolder("testCheckIn"); Entry testFolder = createTestFolder("testCheckIn");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
Feed scope = getFeed(childrenLink.getHref());
// create document for checkout // create document for checkout
Entry document = createDocument(scope.getSelfLink().getHref(), "testCheckin"); Entry document = createDocument(childrenLink.getHref(), "testCheckin");
Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator()); Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator());
assertNotNull(documentRes); assertNotNull(documentRes);
String xml = documentRes.getContentAsString(); String xml = documentRes.getContentAsString();
@@ -648,10 +642,9 @@ public class CMISTest extends BaseCMISWebScriptTest
// retrieve test folder for checkins // retrieve test folder for checkins
Entry testFolder = createTestFolder("testUpdateOnCheckIn"); Entry testFolder = createTestFolder("testUpdateOnCheckIn");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
Feed scope = getFeed(childrenLink.getHref());
// create document for checkout // create document for checkout
Entry document = createDocument(scope.getSelfLink().getHref(), "testUpdateOnCheckIn"); Entry document = createDocument(childrenLink.getHref(), "testUpdateOnCheckIn");
Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator()); Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator());
assertNotNull(documentRes); assertNotNull(documentRes);
String xml = documentRes.getContentAsString(); String xml = documentRes.getContentAsString();
@@ -711,10 +704,9 @@ public class CMISTest extends BaseCMISWebScriptTest
// retrieve test folder for checkins // retrieve test folder for checkins
Entry testFolder = createTestFolder("testGetAllVersions"); Entry testFolder = createTestFolder("testGetAllVersions");
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN); Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
Feed scope = getFeed(childrenLink.getHref());
// create document for checkout // create document for checkout
Entry document = createDocument(scope.getSelfLink().getHref(), "testGetAllVersions"); Entry document = createDocument(childrenLink.getHref(), "testGetAllVersions");
Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator()); Response documentRes = sendRequest(new GetRequest(document.getSelfLink().getHref().toString()), 200, getAtomValidator());
assertNotNull(documentRes); assertNotNull(documentRes);
String xml = documentRes.getContentAsString(); String xml = documentRes.getContentAsString();

View File

@@ -1,46 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
-*- rnc -*- -*- rnc -*- RELAX NG Compact Syntax Grammar for the Atom Format
RELAX NG Compact Syntax Grammar for the Specification Version 11
Atom Format Specification Version 11 -->
--> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
<xs:schema elementFormDefault="qualified" targetNamespace="http://www.w3.org/2007/app"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"
elementFormDefault="qualified" xmlns:cmis="http://www.cmis.org/2008/05">
targetNamespace="http://www.w3.org/2007/app" <xs:import namespace="http://www.w3.org/2005/Atom"
xmlns:atom="http://www.w3.org/2005/Atom" schemaLocation="ATOM4CMIS.xsd" />
xmlns:app="http://www.w3.org/2007/app" <xs:import namespace="http://www.cmis.org/2008/05"
xmlns:cmis="http://www.cmis.org/2008/05" schemaLocation="CMIS-REST.xsd" />
>
<xs:import namespace="http://www.w3.org/2005/Atom" schemaLocation="ATOM4CMIS.xsd"/>
<xs:import namespace="http://www.cmis.org/2008/05" schemaLocation="CMIS-REST.xsd"/>
<xs:element name="service" type="app:appServiceType"></xs:element> <xs:element name="service" type="app:appServiceType"></xs:element>
<xs:complexType name="appServiceType"> <xs:complexType name="appServiceType">
<xs:sequence> <xs:sequence>
<xs:element ref="atom:author" minOccurs="0" maxOccurs="1"></xs:element> <xs:element ref="atom:author" minOccurs="0" maxOccurs="1"></xs:element>
<xs:element ref="app:workspace" minOccurs="1" maxOccurs="unbounded"></xs:element> <xs:element ref="app:workspace" minOccurs="1" maxOccurs="unbounded"></xs:element>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other"/> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
namespace="##other" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:element name="workspace" type="app:appWorkspaceType"></xs:element> <xs:element name="workspace" type="app:appWorkspaceType"></xs:element>
<xs:complexType name="appWorkspaceType"> <xs:complexType name="appWorkspaceType">
<xs:sequence> <xs:sequence>
<xs:element ref="atom:title"></xs:element> <xs:element ref="atom:title"></xs:element>
<xs:element ref="cmis:repositoryInfo" minOccurs="0" maxOccurs="1"></xs:element> <xs:element ref="cmis:repositoryInfo" minOccurs="0"
maxOccurs="1"></xs:element>
<xs:element ref="app:collection" minOccurs="0" maxOccurs="unbounded"></xs:element> <xs:element ref="app:collection" minOccurs="0" maxOccurs="unbounded"></xs:element>
</xs:sequence> </xs:sequence>
<xs:attribute ref="cmis:id"></xs:attribute> <xs:attribute ref="cmis:id"></xs:attribute>
<xs:attribute ref="cmis:repositoryRelationship"></xs:attribute> <xs:attribute ref="cmis:repositoryRelationship"></xs:attribute>
</xs:complexType> </xs:complexType>
<xs:element name="collection" type="app:appCollectionType"></xs:element> <xs:element name="collection" type="app:appCollectionType"></xs:element>
<xs:complexType name="appCollectionType"> <xs:complexType name="appCollectionType">
<xs:sequence> <xs:sequence>
<xs:element ref="atom:title"></xs:element> <xs:element ref="atom:title"></xs:element>
@@ -49,7 +40,6 @@
<xs:attribute ref="cmis:collectionType"></xs:attribute> <xs:attribute ref="cmis:collectionType"></xs:attribute>
<xs:attribute name="href" type="xs:anyURI"></xs:attribute> <xs:attribute name="href" type="xs:anyURI"></xs:attribute>
</xs:complexType> </xs:complexType>
<xs:attribute name="href" type="xs:anyURI"></xs:attribute> <xs:attribute name="href" type="xs:anyURI"></xs:attribute>
</xs:schema> </xs:schema>
<!-- EOF --> <!-- EOF -->

View File

@@ -1,20 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
-*- rnc -*- -*- rnc -*- RELAX NG Compact Syntax Grammar for the Atom Format
RELAX NG Compact Syntax Grammar for the Specification Version 11
Atom Format Specification Version 11 -->
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.cmis.org/2008/05"
targetNamespace="http://www.cmis.org/2008/05" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:cmis="http://www.cmis.org/2008/05"> xmlns:cmis="http://www.cmis.org/2008/05">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" /> <xs:import namespace="http://www.w3.org/XML/1998/namespace" />
<xs:attribute name="id" type="xs:string" /> <xs:attribute name="id" type="xs:string" />
<xs:attribute name="index" type="xs:int" /> <xs:attribute name="index" type="xs:integer" />
<xs:attribute name="collectionType"> <xs:attribute name="collectionType">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -26,9 +21,7 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:attribute> </xs:attribute>
<xs:attribute name="repositoryRelationship" type="xs:string" /> <xs:attribute name="repositoryRelationship" type="xs:string" />
<xs:element name="repositoryInfo" type="cmis:repositoryInfoType" /> <xs:element name="repositoryInfo" type="cmis:repositoryInfoType" />
<xs:element name="property" type="cmis:propertyDefinitionType" /> <xs:element name="property" type="cmis:propertyDefinitionType" />
<xs:element name="parentId" type="xs:string" /> <xs:element name="parentId" type="xs:string" />
@@ -37,26 +30,24 @@
<xs:element name="description" type="xs:string" /> <xs:element name="description" type="xs:string" />
<xs:element name="isQueryable" type="xs:boolean" /> <xs:element name="isQueryable" type="xs:boolean" />
<xs:element name="isCreatable" type="xs:boolean" /> <xs:element name="isCreatable" type="xs:boolean" />
<xs:element name="isFileable" type="xs:boolean" />
<xs:element name="queryName" type="xs:string" /> <xs:element name="queryName" type="xs:string" />
<xs:element name="baseTypeQueryName" type="xs:string" /> <xs:element name="baseTypeQueryName" type="xs:string" />
<xs:element name="isContentStreamAllowed" type="xs:boolean" />
<xs:element name="AllowedSourceTypes" type="xs:string" /> <xs:element name="AllowedSourceTypes" type="xs:string" />
<xs:element name="AllowedTargetTypes" type="xs:string" /> <xs:element name="AllowedTargetTypes" type="xs:string" />
<xs:element name="constraints" type="xs:string" /> <xs:element name="constraints" type="xs:string" />
<xs:element name="objectId" type="xs:string" /> <xs:element name="objectId" type="xs:string" />
<xs:element name="type" type="cmis:typeType" /> <xs:element name="type" type="cmis:typeType" />
<xs:element name="parentUrl" type="xs:anyURI" /> <xs:element name="parentUrl" type="xs:anyURI" />
<xs:element name="maxLength" type="xs:int" /> <xs:element name="maxLength" type="xs:integer" />
<xs:element name="schemaURI" type="xs:string" /> <xs:element name="schemaURI" type="xs:string" />
<xs:element name="encoding" type="xs:string" /> <xs:element name="encoding" type="xs:string" />
<xs:element name="isOpenChoice" type="xs:boolean" /> <xs:element name="isOpenChoice" type="xs:boolean" />
<xs:element name="isRequired" type="xs:boolean" /> <xs:element name="isRequired" type="xs:boolean" />
<xs:element name="defaultValue" type="xs:string" /> <xs:element name="defaultValue" type="xs:string" />
<xs:element name="creationDate" type="xs:dateTime" /> <xs:element name="creationDate" type="xs:dateTime" />
<xs:element name="lastModifiedBy" type="xs:dateTime" /> <xs:element name="lastModifiedBy" type="xs:dateTime" />
<xs:element name="baseType" type="cmis:baseObjectType" /> <xs:element name="baseType" type="cmis:baseObjectType" />
<xs:element name="canDelete" type="xs:boolean" /> <xs:element name="canDelete" type="xs:boolean" />
<xs:element name="canUpdateProperties" type="xs:boolean" /> <xs:element name="canUpdateProperties" type="xs:boolean" />
<xs:element name="canGetProperties" type="xs:boolean" /> <xs:element name="canGetProperties" type="xs:boolean" />
@@ -76,22 +67,23 @@
<xs:element name="canRemovePolicy" type="xs:boolean" /> <xs:element name="canRemovePolicy" type="xs:boolean" />
<xs:element name="canGetChildren" type="xs:boolean" /> <xs:element name="canGetChildren" type="xs:boolean" />
<xs:element name="canGetDescendants" type="xs:boolean" /> <xs:element name="canGetDescendants" type="xs:boolean" />
<xs:element name="canGetRelationships" type="xs:boolean" />
<xs:element name="isControllable" type="xs:boolean" /> <xs:element name="isControllable" type="xs:boolean" />
<xs:element name="source" type="xs:string" /> <xs:element name="source" type="xs:string" />
<xs:element name="target" type="xs:string" /> <xs:element name="target" type="xs:string" />
<xs:element name="isImmutable" type="xs:boolean" /> <xs:element name="isImmutable" type="xs:boolean" />
<xs:element name="hasMoreItems" type="xs:boolean" /> <xs:element name="hasMoreItems" type="xs:boolean" />
<xs:element name="allowableActions" type="cmis:allowableActions" /> <xs:element name="allowableActions" type="cmis:allowableActionsType" />
<xs:element name="query" type="cmis:queryType" /> <xs:element name="query" type="cmis:queryType" />
<xs:element name="isOrderable" type="xs:boolean" /> <xs:element name="isOrderable" type="xs:boolean" />
<xs:element name="statement" type="xs:string" /> <xs:element name="statement" type="xs:string" />
<xs:element name="pageSize" type="xs:int" /> <xs:element name="pageSize" type="xs:integer" />
<xs:element name="skipCount" type="xs:int" /> <xs:element name="skipCount" type="xs:integer" />
<xs:element name="returnAllowableActions" type="xs:boolean" /> <xs:element name="returnAllowableActions" type="xs:boolean" />
<xs:element name="searchAllVersions" type="xs:boolean" /> <xs:element name="searchAllVersions" type="xs:boolean" />
<xs:element name="isInherited" type="xs:boolean" />
<xs:element name="propertyName" type="xs:string" />
<xs:element name="propertyId" type="xs:string" />
<xs:element name="propertyType"> <xs:element name="propertyType">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -108,7 +100,15 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
<xs:element name="contentStreamAllowed">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="notallowed" />
<xs:enumeration value="allowed" />
<xs:enumeration value="required" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="cardinality"> <xs:element name="cardinality">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -117,18 +117,15 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
<xs:element name="choices"> <xs:element name="choices">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
<xs:extension base="xs:string"> <xs:extension base="xs:string">
<xs:attribute name="index" <xs:attribute name="index" type="xs:positiveInteger" />
type="xs:positiveInteger" />
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="updateability"> <xs:element name="updateability">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -138,52 +135,38 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
<xs:complexType name="repositoryInfoType"> <xs:complexType name="repositoryInfoType">
<xs:sequence minOccurs="1"> <xs:sequence minOccurs="1">
<xs:element name="repositoryId" type="xs:string" <xs:element name="repositoryId" type="xs:string"
minOccurs="1" /> minOccurs="1" />
<xs:element name="repositoryName" type="xs:string" <xs:element name="repositoryName" type="xs:string"
minOccurs="1" /> minOccurs="1" />
<xs:element name="repositoryDescription" type="xs:string" <xs:element name="repositoryDescription" type="xs:string"
minOccurs="1" /> minOccurs="1" />
<xs:element name="vendorName" type="xs:string" /> <xs:element name="vendorName" type="xs:string" />
<xs:element name="productName" type="xs:string" /> <xs:element name="productName" type="xs:string" />
<xs:element name="productVersion" type="xs:string" /> <xs:element name="productVersion" type="xs:string" />
<xs:element name="capabilities" <xs:element name="capabilities" type="cmis:RepositoryInfoCapabilities" />
type="cmis:RepositoryInfoCapabilities" /> <xs:element name="cmisVersionsSupported" type="xs:string" />
<xs:element name="repositorySpecificInformation" type="xs:string"
<xs:element name="repositorySpecificInformation" maxOccurs="1" minOccurs="0" />
type="xs:string" maxOccurs="1" minOccurs="0" /> <xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded" />
<xs:any namespace="##other" processContents="skip"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:complexType name="RepositoryInfoCapabilities"> <xs:complexType name="RepositoryInfoCapabilities">
<xs:sequence> <xs:sequence>
<xs:element name="capabilityMultifiling" type="xs:boolean" <xs:element name="capabilityMultifiling" type="xs:boolean"
minOccurs="1" maxOccurs="1" /> minOccurs="1" maxOccurs="1" />
<xs:element name="capabilityUnfiling" type="xs:boolean" <xs:element name="capabilityUnfiling" type="xs:boolean"
minOccurs="1" maxOccurs="1" /> minOccurs="1" maxOccurs="1" />
<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
<xs:element name="capabilityVersionSpecificFiling" minOccurs="1" maxOccurs="1" />
type="xs:boolean" minOccurs="1" maxOccurs="1" />
<xs:element name="capabilityPWCUpdateable" type="xs:boolean" <xs:element name="capabilityPWCUpdateable" type="xs:boolean"
minOccurs="1" maxOccurs="1" /> minOccurs="1" maxOccurs="1" />
<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
<xs:element name="capabilityAllVersionsSearchable" minOccurs="1" maxOccurs="1" />
type="xs:boolean" minOccurs="1" maxOccurs="1" /> <xs:element name="capabilityJoin" minOccurs="1" maxOccurs="1">
<xs:element name="capabilityJoin" minOccurs="1"
maxOccurs="1">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
<xs:enumeration value="noJoin" /> <xs:enumeration value="noJoin" />
@@ -201,9 +184,10 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
<xs:any namespace="##other" processContents="skip" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:simpleType name="baseObjectType"> <xs:simpleType name="baseObjectType">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
<xs:enumeration value="document" /> <xs:enumeration value="document" />
@@ -212,7 +196,6 @@
<xs:enumeration value="policy" /> <xs:enumeration value="policy" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:element name="contentStreamMimetype"> <xs:element name="contentStreamMimetype">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
@@ -220,197 +203,140 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
<xs:complexType name="propertyDefinitionType"> <xs:complexType name="propertyDefinitionType">
<xs:sequence> <xs:sequence>
<xs:element ref="cmis:propertyName" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:propertyId" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:displayName" minOccurs="1" <xs:element ref="cmis:displayName" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:description" minOccurs="0" <xs:element ref="cmis:description" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isInherited" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:propertyType" minOccurs="1" <xs:element ref="cmis:propertyType" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:cardinality" minOccurs="1" <xs:element ref="cmis:cardinality" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:maxLength" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:maxLength" minOccurs="0" <xs:element ref="cmis:schemaURI" minOccurs="0" maxOccurs="1" />
maxOccurs="1" />
<xs:element ref="cmis:schemaURI" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:encoding" minOccurs="0" maxOccurs="1" /> <xs:element ref="cmis:encoding" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:choices" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="cmis:choices" minOccurs="0"
maxOccurs="unbounded" />
<xs:element ref="cmis:isOpenChoice" minOccurs="0" <xs:element ref="cmis:isOpenChoice" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isRequired" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:isRequired" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:defaultValue" minOccurs="0" <xs:element ref="cmis:defaultValue" minOccurs="0"
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:element ref="cmis:updateability" minOccurs="1" <xs:element ref="cmis:updateability" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isQueryable" minOccurs="1" <xs:element ref="cmis:isQueryable" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isOrderable" minOccurs="1" <xs:element ref="cmis:isOrderable" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:any processContents="lax" namespace="##other" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence> </xs:sequence>
<xs:attribute ref="cmis:id" /> <xs:attribute ref="cmis:id" />
</xs:complexType> </xs:complexType>
<xs:complexType name="allowableActionsType">
<xs:complexType name="allowableActions"> <xs:sequence>
<xs:all>
<xs:element ref="cmis:canDelete" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:parentId" minOccurs="0" maxOccurs="1" /> <xs:element ref="cmis:parentId" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:parentUrl" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:parentUrl" minOccurs="0" <xs:element ref="cmis:canDelete" minOccurs="0" maxOccurs="1" />
maxOccurs="1" />
<xs:element ref="cmis:canUpdateProperties" minOccurs="0" <xs:element ref="cmis:canUpdateProperties" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canGetProperties" minOccurs="0" <xs:element ref="cmis:canGetProperties" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canGetRelationships" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:canGetParents" minOccurs="0" <xs:element ref="cmis:canGetParents" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canGetDescendants" minOccurs="0" <xs:element ref="cmis:canGetDescendants" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canMove" minOccurs="0" maxOccurs="1" /> <xs:element ref="cmis:canMove" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:canDeleteVersion" minOccurs="0" <xs:element ref="cmis:canDeleteVersion" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canDeleteContent" minOccurs="0" <xs:element ref="cmis:canDeleteContent" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canCheckout" minOccurs="0" <xs:element ref="cmis:canCheckout" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canCancelCheckout" minOccurs="0" <xs:element ref="cmis:canCancelCheckout" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canCheckin" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:canCheckin" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:canSetContent" minOccurs="0" <xs:element ref="cmis:canSetContent" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canGetAllVersions" minOccurs="0" <xs:element ref="cmis:canGetAllVersions" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canAddToFolder" minOccurs="0" <xs:element ref="cmis:canAddToFolder" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canRemoveFromFolder" minOccurs="0" <xs:element ref="cmis:canRemoveFromFolder" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canViewContent" minOccurs="0" <xs:element ref="cmis:canViewContent" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canAddPolicy" minOccurs="0" <xs:element ref="cmis:canAddPolicy" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canRemovePolicy" minOccurs="0" <xs:element ref="cmis:canRemovePolicy" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:canGetChildren" minOccurs="0" <xs:element ref="cmis:canGetChildren" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
</xs:all> processContents="lax" />
</xs:complexType> </xs:sequence>
</xs:complexType>
<xs:complexType name="queryType"> <xs:complexType name="queryType">
<xs:sequence> <xs:sequence>
<xs:element ref="cmis:statement" minOccurs="1" <xs:element ref="cmis:statement" minOccurs="1" maxOccurs="1" />
maxOccurs="1" /> <xs:element ref="cmis:searchAllVersions" minOccurs="0"
maxOccurs="1" />
<xs:element ref="cmis:searchAllVersions" minOccurs="0" <xs:element ref="cmis:pageSize" minOccurs="0" maxOccurs="1" />
maxOccurs="1" /> <xs:element ref="cmis:skipCount" minOccurs="0" maxOccurs="1" />
<xs:element ref="cmis:returnAllowableActions" minOccurs="0"
<xs:element ref="cmis:pageSize" minOccurs="0" maxOccurs="1" /> maxOccurs="1" />
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
<xs:element ref="cmis:skipCount" minOccurs="0" processContents="lax" />
maxOccurs="1" />
<xs:element ref="cmis:returnAllowableActions" minOccurs="0"
maxOccurs="1" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:complexType name="typeType"> <xs:complexType name="typeType">
<xs:sequence> <xs:sequence>
<xs:element ref="cmis:objectId" minOccurs="1" maxOccurs="1" /> <xs:element ref="cmis:objectId" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:baseType" minOccurs="1" maxOccurs="1" /> <xs:element ref="cmis:baseType" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:lastModifiedBy" minOccurs="1" <xs:element ref="cmis:lastModifiedBy" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:creationDate" minOccurs="1" <xs:element ref="cmis:creationDate" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:queryName" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:queryName" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:displayName" minOccurs="1" <xs:element ref="cmis:displayName" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:baseTypeQueryName" minOccurs="1" <xs:element ref="cmis:baseTypeQueryName" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:parentId" minOccurs="1" maxOccurs="1" /> <xs:element ref="cmis:parentId" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:description" minOccurs="0" <xs:element ref="cmis:description" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isCreatable" minOccurs="1" <xs:element ref="cmis:isCreatable" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isFileable" minOccurs="1" maxOccurs="1" />
<xs:element ref="cmis:isVersionable" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:isQueryable" minOccurs="1" <xs:element ref="cmis:isQueryable" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isContentStreamAllowed" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:isControllable" minOccurs="1" <xs:element ref="cmis:isControllable" minOccurs="1"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:isVersionable" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:contentStreamAllowed" minOccurs="1"
maxOccurs="1" />
<xs:element ref="cmis:AllowedSourceTypes" minOccurs="0" <xs:element ref="cmis:AllowedSourceTypes" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:AllowedTargetTypes" minOccurs="0" <xs:element ref="cmis:AllowedTargetTypes" minOccurs="0"
maxOccurs="1" /> maxOccurs="1" />
<xs:element ref="cmis:property" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="cmis:property" minOccurs="0" <xs:element ref="cmis:type" minOccurs="0" maxOccurs="unbounded" />
maxOccurs="unbounded" /> <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
processContents="lax" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<!-- properties --> <!-- properties -->
<xs:element name="properties" type="cmis:propertiesType" /> <xs:element name="properties" type="cmis:propertiesType" />
<xs:complexType name="propertiesType"> <xs:complexType name="propertiesType">
<xs:sequence> <xs:sequence>
<xs:element ref="cmis:propertyBoolean" minOccurs="0" <xs:element ref="cmis:propertyBoolean" minOccurs="0"
@@ -419,8 +345,7 @@
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:element ref="cmis:propertyDecimal" minOccurs="0" <xs:element ref="cmis:propertyDecimal" minOccurs="0"
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:element ref="cmis:propertyID" minOccurs="0" <xs:element ref="cmis:propertyID" minOccurs="0" maxOccurs="unbounded" />
maxOccurs="unbounded" />
<xs:element ref="cmis:propertyInteger" minOccurs="0" <xs:element ref="cmis:propertyInteger" minOccurs="0"
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:element ref="cmis:propertyString" minOccurs="0" <xs:element ref="cmis:propertyString" minOccurs="0"
@@ -431,12 +356,10 @@
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:element ref="cmis:propertyHTML" minOccurs="0" <xs:element ref="cmis:propertyHTML" minOccurs="0"
maxOccurs="unbounded" /> maxOccurs="unbounded" />
<xs:any namespace="##other" processContents="lax" <xs:any namespace="##other" processContents="lax" minOccurs="0"
minOccurs="0" maxOccurs="unbounded" /> maxOccurs="unbounded" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
<xs:element name="propertyString"> <xs:element name="propertyString">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -447,7 +370,6 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyHTML"> <xs:element name="propertyHTML">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -458,8 +380,6 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyXML"> <xs:element name="propertyXML">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -470,7 +390,6 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyBoolean"> <xs:element name="propertyBoolean">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -481,7 +400,6 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyID"> <xs:element name="propertyID">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -492,7 +410,6 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyURI"> <xs:element name="propertyURI">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -503,19 +420,16 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyDecimal"> <xs:element name="propertyDecimal">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
<xs:extension base="xs:float"> <xs:extension base="xs:decimal">
<xs:attribute ref="cmis:name" /> <xs:attribute ref="cmis:name" />
<xs:attribute ref="cmis:index" /> <xs:attribute ref="cmis:index" />
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyDateTime"> <xs:element name="propertyDateTime">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
@@ -526,18 +440,16 @@
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="propertyInteger"> <xs:element name="propertyInteger">
<xs:complexType> <xs:complexType>
<xs:simpleContent> <xs:simpleContent>
<xs:extension base="xs:int"> <xs:extension base="xs:integer">
<xs:attribute ref="cmis:name" /> <xs:attribute ref="cmis:name" />
<xs:attribute ref="cmis:index" /> <xs:attribute ref="cmis:index" />
</xs:extension> </xs:extension>
</xs:simpleContent> </xs:simpleContent>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:attribute name="name" type="xs:string" /> <xs:attribute name="name" type="xs:string" />
</xs:schema> </xs:schema>
<!-- EOF --> <!-- EOF -->

View File

@@ -5,13 +5,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/Atom ATOM4CMIS.xsd http://www.cmis.org/2008/05 CMIS-REST.xsd "> xsi:schemaLocation="http://www.w3.org/2005/Atom ATOM4CMIS.xsd http://www.cmis.org/2008/05 CMIS-REST.xsd ">
<!-- all -->
<cmis:canDelete>true</cmis:canDelete>
<!-- if not embedded in entry --> <!-- if not embedded in entry -->
<cmis:parentId>cmis:parentId</cmis:parentId> <cmis:parentId>cmis:parentId</cmis:parentId>
<cmis:parentUrl>http://tempuri.org</cmis:parentUrl> <cmis:parentUrl>http://tempuri.org</cmis:parentUrl>
<!-- all -->
<cmis:canDelete>true</cmis:canDelete>
<!-- all --> <!-- all -->
<cmis:canUpdateProperties>true</cmis:canUpdateProperties> <cmis:canUpdateProperties>true</cmis:canUpdateProperties>
<cmis:canGetProperties>true</cmis:canGetProperties> <cmis:canGetProperties>true</cmis:canGetProperties>

View File

@@ -23,6 +23,7 @@
<cmis:capabilityJoin>innerAndOuter</cmis:capabilityJoin> <cmis:capabilityJoin>innerAndOuter</cmis:capabilityJoin>
<cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText> <cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText>
</cmis:capabilities> </cmis:capabilities>
<cmis:cmisVersionsSupported>0.43</cmis:cmisVersionsSupported>
<cmis:repositorySpecificInformation>Welcome to ACME 99</cmis:repositorySpecificInformation> <cmis:repositorySpecificInformation>Welcome to ACME 99</cmis:repositorySpecificInformation>
</cmis:repositoryInfo> </cmis:repositoryInfo>
<app:collection cmis:collectionType="unfiled" href="http://www.cmis.org/rep1/unfiled"> <app:collection cmis:collectionType="unfiled" href="http://www.cmis.org/rep1/unfiled">

View File

@@ -13,17 +13,21 @@
<cmis:baseTypeQueryName>document</cmis:baseTypeQueryName> <cmis:baseTypeQueryName>document</cmis:baseTypeQueryName>
<cmis:parentId></cmis:parentId> <cmis:parentId></cmis:parentId>
<cmis:description>The document type</cmis:description> <cmis:description>The document type</cmis:description>
<cmis:isCreatable>true</cmis:isCreatable> <cmis:isCreatable>true</cmis:isCreatable>
<cmis:isVersionable>true</cmis:isVersionable> <cmis:isFileable>true</cmis:isFileable>
<cmis:isQueryable>true</cmis:isQueryable> <cmis:isQueryable>true</cmis:isQueryable>
<cmis:isContentStreamAllowed>true</cmis:isContentStreamAllowed>
<cmis:isControllable>true</cmis:isControllable> <cmis:isControllable>true</cmis:isControllable>
<cmis:isVersionable>true</cmis:isVersionable>
<cmis:contentStreamAllowed>allowed</cmis:contentStreamAllowed>
<!-- optional property definitions --> <!-- optional property definitions -->
<cmis:property cmis:id="foo1"> <cmis:property cmis:id="foo1">
<cmis:propertyName>foo1</cmis:propertyName>
<cmis:propertyId>propIdForFoo1</cmis:propertyId>
<cmis:displayName>foo1</cmis:displayName> <cmis:displayName>foo1</cmis:displayName>
<cmis:description>Description of foo1</cmis:description> <cmis:description>Description of foo1</cmis:description>
<cmis:isInherited>false</cmis:isInherited>
<cmis:propertyType>String</cmis:propertyType> <cmis:propertyType>String</cmis:propertyType>
<cmis:cardinality>Single</cmis:cardinality> <cmis:cardinality>Single</cmis:cardinality>
<cmis:maxLength>64</cmis:maxLength> <cmis:maxLength>64</cmis:maxLength>