mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -36,7 +36,9 @@
|
||||
<cmis:propertyDateTime cmis:name="lastModificationDate">${xmldate(node.properties.modified)}</cmis:propertyDateTime>
|
||||
<cmis:propertyID cmis:name="objectId">${node.nodeRef}</cmis:propertyID>
|
||||
<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="objectType">document</cmis:propertyString> [#-- TODO --]
|
||||
<cmis:propertyString cmis:name="createdBy">${node.properties.creator}</cmis:propertyString>
|
||||
<cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</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:propertyID cmis:name="objectId">${node.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="createdBy">${node.properties.creator}</cmis:propertyString>
|
||||
<cmis:propertyString cmis:name="lastModifiedBy">${node.properties.modifier}</cmis:propertyString>
|
||||
<cmis:propertyString cmis:name="name">${node.name}</cmis:propertyString>
|
||||
</cmis:properties>
|
||||
[/#macro]
|
||||
|
||||
|
@@ -26,6 +26,7 @@
|
||||
<icon>${absurl(url.context)}/images/logo/AlfrescoLogo16.ico</icon>
|
||||
<id>urn:uuid:${node.id}</id>
|
||||
<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 --]
|
||||
<title>${node.name}</title>
|
||||
<updated>${xmldate(node.properties.modified)}</updated>
|
||||
|
@@ -19,9 +19,10 @@
|
||||
<cmis:capabilityVersionSpecificFiling>false</cmis:capabilityVersionSpecificFiling>
|
||||
<cmis:capabilityPWCUpdateable>true</cmis:capabilityPWCUpdateable>
|
||||
<cmis:capabilityAllVersionsSearchable>false</cmis:capabilityAllVersionsSearchable>
|
||||
<cmis:capabilityJoin>innerAndOuter</cmis:capabilityJoin> <#-- TODO: check -->
|
||||
<cmis:capabilityJoin>noJoin</cmis:capabilityJoin>
|
||||
<cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText>
|
||||
</cmis:capabilities>
|
||||
<cmis:cmisVersionsSupported>${cmisVersion}</cmis:cmisVersionsSupported>
|
||||
<cmis:repositorySpecificInformation></cmis:repositorySpecificInformation>
|
||||
</cmis:repositoryInfo>
|
||||
|
||||
|
@@ -2,6 +2,7 @@
|
||||
<shortname>Repository AtomPub Service Document</shortname>
|
||||
<description>Repository ATOM Publishing Service Document</description>
|
||||
<url>/api/repository</url>
|
||||
<url>/api/cmis</url>
|
||||
<format default="atom"/>
|
||||
<authentication>none</authentication>
|
||||
<family>CMIS</family>
|
||||
|
@@ -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>
|
@@ -1 +1,2 @@
|
||||
model.cmisVersion = cmis.version;
|
||||
model.defaultRootFolderPath = cmis.defaultRootFolderPath;
|
@@ -10,7 +10,6 @@
|
||||
|
||||
[@feedLib.node node=node]
|
||||
[@pagingLib.links cursor=cursor/]
|
||||
[@entryLib.folderCMISLinks node=node/] [#-- TODO: not part of 0.42 schema --]
|
||||
[/@feedLib.node]
|
||||
|
||||
[#list results as child]
|
||||
@@ -24,7 +23,6 @@
|
||||
[/#list]
|
||||
|
||||
[@feedLib.hasMore more=cursor/]
|
||||
[@entryLib.folderCMISProps node=node/] [#-- TODO: not part of 0.42 schema --]
|
||||
[@pagingLib.opensearch cursor=cursor/]
|
||||
|
||||
</feed>
|
||||
|
@@ -394,21 +394,12 @@
|
||||
<property name="extensionName"><value>cmis</value></property>
|
||||
<property name="serviceRegistry" ref="ServiceRegistry" />
|
||||
<property name="repository" ref="repositoryHelper" />
|
||||
<property name="CMISService" ref="webscripts.cmis.service" />
|
||||
<property name="CMISService" ref="CMISService" />
|
||||
<property name="paging" ref="webscripts.js.paging" />
|
||||
</bean>
|
||||
|
||||
<!-- 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">
|
||||
<property name="abderaService" ref="webscripts.abdera"/>
|
||||
<property name="defaultNamespace"><value>http://www.cmis.org/2008/05</value></property>
|
||||
|
@@ -24,7 +24,8 @@
|
||||
*/
|
||||
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.ScriptNode;
|
||||
import org.alfresco.repo.model.Repository;
|
||||
@@ -41,7 +42,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
||||
*
|
||||
* @author davic
|
||||
*/
|
||||
public class CMISScript extends BaseScopableProcessorExtension
|
||||
public class CMISScript extends BaseScopableProcessorExtension
|
||||
{
|
||||
private static final TypesFilter defaultTypesFilter = TypesFilter.FoldersAndDocuments;
|
||||
|
||||
@@ -91,6 +92,16 @@ public class CMISScript extends BaseScopableProcessorExtension
|
||||
this.cmisService = cmisService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the supported CMIS Version
|
||||
*
|
||||
* @return CMIS version
|
||||
*/
|
||||
public String getVersion()
|
||||
{
|
||||
return cmisService.getCMISVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default root folder path
|
||||
*
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -473,10 +473,7 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
{
|
||||
// retrieve test folder for checkouts
|
||||
Entry testFolder = createTestFolder("testGetCheckedOut");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
assertNotNull(scope);
|
||||
CMISProperties props = scope.getExtension(CMISConstants.PROPERTIES);
|
||||
CMISProperties props = testFolder.getExtension(CMISConstants.PROPERTIES);
|
||||
String scopeId = props.getObjectId();
|
||||
assertNotNull(scopeId);
|
||||
|
||||
@@ -497,10 +494,9 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
// retrieve test folder for checkouts
|
||||
Entry testFolder = createTestFolder("testCheckout");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
|
||||
// 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());
|
||||
assertNotNull(documentRes);
|
||||
String documentXML = documentRes.getContentAsString();
|
||||
@@ -528,10 +524,9 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
// retrieve test folder for checkouts
|
||||
Entry testFolder = createTestFolder("testCancelCheckout");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
|
||||
// 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());
|
||||
assertNotNull(documentRes);
|
||||
String xml = documentRes.getContentAsString();
|
||||
@@ -574,10 +569,9 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
// retrieve test folder for checkins
|
||||
Entry testFolder = createTestFolder("testCheckIn");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
|
||||
// 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());
|
||||
assertNotNull(documentRes);
|
||||
String xml = documentRes.getContentAsString();
|
||||
@@ -648,10 +642,9 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
// retrieve test folder for checkins
|
||||
Entry testFolder = createTestFolder("testUpdateOnCheckIn");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
|
||||
// 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());
|
||||
assertNotNull(documentRes);
|
||||
String xml = documentRes.getContentAsString();
|
||||
@@ -711,10 +704,9 @@ public class CMISTest extends BaseCMISWebScriptTest
|
||||
// retrieve test folder for checkins
|
||||
Entry testFolder = createTestFolder("testGetAllVersions");
|
||||
Link childrenLink = testFolder.getLink(CMISConstants.REL_CHILDREN);
|
||||
Feed scope = getFeed(childrenLink.getHref());
|
||||
|
||||
// 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());
|
||||
assertNotNull(documentRes);
|
||||
String xml = documentRes.getContentAsString();
|
||||
|
@@ -1,55 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
-*- rnc -*-
|
||||
RELAX NG Compact Syntax Grammar for the
|
||||
Atom Format Specification Version 11
|
||||
-->
|
||||
<xs:schema
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://www.w3.org/2007/app"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:app="http://www.w3.org/2007/app"
|
||||
xmlns:cmis="http://www.cmis.org/2008/05"
|
||||
>
|
||||
<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:complexType name="appServiceType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:author" minOccurs="0" maxOccurs="1"></xs:element>
|
||||
<xs:element ref="app:workspace" minOccurs="1" maxOccurs="unbounded"></xs:element>
|
||||
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##other"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="workspace" type="app:appWorkspaceType"></xs:element>
|
||||
|
||||
<xs:complexType name="appWorkspaceType">
|
||||
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:title"></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:sequence>
|
||||
<xs:attribute ref="cmis:id"></xs:attribute>
|
||||
<xs:attribute ref="cmis:repositoryRelationship"></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="collection" type="app:appCollectionType"></xs:element>
|
||||
|
||||
<xs:complexType name="appCollectionType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:title"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute ref="cmis:id"></xs:attribute>
|
||||
<xs:attribute ref="cmis:collectionType"></xs:attribute>
|
||||
<xs:attribute name="href" type="xs:anyURI"></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:attribute name="href" type="xs:anyURI"></xs:attribute>
|
||||
<!--
|
||||
-*- rnc -*- RELAX NG Compact Syntax Grammar for the Atom Format
|
||||
Specification Version 11
|
||||
-->
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified" targetNamespace="http://www.w3.org/2007/app"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"
|
||||
xmlns:cmis="http://www.cmis.org/2008/05">
|
||||
<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:complexType name="appServiceType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:author" minOccurs="0" maxOccurs="1"></xs:element>
|
||||
<xs:element ref="app:workspace" minOccurs="1" maxOccurs="unbounded"></xs:element>
|
||||
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"
|
||||
namespace="##other" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:element name="workspace" type="app:appWorkspaceType"></xs:element>
|
||||
<xs:complexType name="appWorkspaceType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:title"></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:sequence>
|
||||
<xs:attribute ref="cmis:id"></xs:attribute>
|
||||
<xs:attribute ref="cmis:repositoryRelationship"></xs:attribute>
|
||||
</xs:complexType>
|
||||
<xs:element name="collection" type="app:appCollectionType"></xs:element>
|
||||
<xs:complexType name="appCollectionType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="atom:title"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute ref="cmis:id"></xs:attribute>
|
||||
<xs:attribute ref="cmis:collectionType"></xs:attribute>
|
||||
<xs:attribute name="href" type="xs:anyURI"></xs:attribute>
|
||||
</xs:complexType>
|
||||
<xs:attribute name="href" type="xs:anyURI"></xs:attribute>
|
||||
</xs:schema>
|
||||
<!-- EOF -->
|
||||
<!-- EOF -->
|
@@ -1,20 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
-*- rnc -*-
|
||||
RELAX NG Compact Syntax Grammar for the
|
||||
Atom Format Specification Version 11
|
||||
-->
|
||||
<!--
|
||||
-*- rnc -*- RELAX NG Compact Syntax Grammar for the Atom Format
|
||||
Specification Version 11
|
||||
-->
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified"
|
||||
targetNamespace="http://www.cmis.org/2008/05"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
||||
elementFormDefault="qualified" targetNamespace="http://www.cmis.org/2008/05"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
||||
xmlns:cmis="http://www.cmis.org/2008/05">
|
||||
|
||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
|
||||
<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:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@@ -26,9 +21,7 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
|
||||
<xs:attribute name="repositoryRelationship" type="xs:string" />
|
||||
|
||||
<xs:element name="repositoryInfo" type="cmis:repositoryInfoType" />
|
||||
<xs:element name="property" type="cmis:propertyDefinitionType" />
|
||||
<xs:element name="parentId" type="xs:string" />
|
||||
@@ -37,26 +30,24 @@
|
||||
<xs:element name="description" type="xs:string" />
|
||||
<xs:element name="isQueryable" 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="baseTypeQueryName" type="xs:string" />
|
||||
<xs:element name="isContentStreamAllowed" type="xs:boolean" />
|
||||
<xs:element name="AllowedSourceTypes" type="xs:string" />
|
||||
<xs:element name="AllowedTargetTypes" type="xs:string" />
|
||||
<xs:element name="constraints" type="xs:string" />
|
||||
<xs:element name="objectId" type="xs:string" />
|
||||
<xs:element name="type" type="cmis:typeType" />
|
||||
<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="encoding" type="xs:string" />
|
||||
<xs:element name="isOpenChoice" type="xs:boolean" />
|
||||
<xs:element name="isRequired" type="xs:boolean" />
|
||||
<xs:element name="defaultValue" type="xs:string" />
|
||||
|
||||
<xs:element name="creationDate" type="xs:dateTime" />
|
||||
<xs:element name="lastModifiedBy" type="xs:dateTime" />
|
||||
<xs:element name="baseType" type="cmis:baseObjectType" />
|
||||
|
||||
<xs:element name="canDelete" type="xs:boolean" />
|
||||
<xs:element name="canUpdateProperties" type="xs:boolean" />
|
||||
<xs:element name="canGetProperties" type="xs:boolean" />
|
||||
@@ -76,22 +67,23 @@
|
||||
<xs:element name="canRemovePolicy" type="xs:boolean" />
|
||||
<xs:element name="canGetChildren" 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="source" type="xs:string" />
|
||||
<xs:element name="target" type="xs:string" />
|
||||
<xs:element name="isImmutable" 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="isOrderable" type="xs:boolean" />
|
||||
<xs:element name="statement" type="xs:string" />
|
||||
<xs:element name="pageSize" type="xs:int" />
|
||||
<xs:element name="skipCount" type="xs:int" />
|
||||
<xs:element name="pageSize" type="xs:integer" />
|
||||
<xs:element name="skipCount" type="xs:integer" />
|
||||
<xs:element name="returnAllowableActions" 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:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@@ -108,7 +100,15 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</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:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@@ -117,18 +117,15 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="choices">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="index"
|
||||
type="xs:positiveInteger" />
|
||||
<xs:attribute name="index" type="xs:positiveInteger" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="updateability">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@@ -138,52 +135,38 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="repositoryInfoType">
|
||||
<xs:sequence minOccurs="1">
|
||||
<xs:element name="repositoryId" type="xs:string"
|
||||
minOccurs="1" />
|
||||
|
||||
<xs:element name="repositoryName" type="xs:string"
|
||||
minOccurs="1" />
|
||||
|
||||
<xs:element name="repositoryDescription" type="xs:string"
|
||||
minOccurs="1" />
|
||||
|
||||
<xs:element name="vendorName" type="xs:string" />
|
||||
<xs:element name="productName" type="xs:string" />
|
||||
<xs:element name="productVersion" type="xs:string" />
|
||||
<xs:element name="capabilities"
|
||||
type="cmis:RepositoryInfoCapabilities" />
|
||||
|
||||
<xs:element name="repositorySpecificInformation"
|
||||
type="xs:string" maxOccurs="1" minOccurs="0" />
|
||||
|
||||
<xs:any namespace="##other" processContents="skip"
|
||||
minOccurs="0" maxOccurs="unbounded" />
|
||||
|
||||
<xs:element name="capabilities" type="cmis:RepositoryInfoCapabilities" />
|
||||
<xs:element name="cmisVersionsSupported" type="xs:string" />
|
||||
<xs:element name="repositorySpecificInformation" type="xs:string"
|
||||
maxOccurs="1" minOccurs="0" />
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="RepositoryInfoCapabilities">
|
||||
<xs:sequence>
|
||||
<xs:element name="capabilityMultifiling" type="xs:boolean"
|
||||
minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element name="capabilityUnfiling" type="xs:boolean"
|
||||
minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element name="capabilityVersionSpecificFiling"
|
||||
type="xs:boolean" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element name="capabilityVersionSpecificFiling" type="xs:boolean"
|
||||
minOccurs="1" maxOccurs="1" />
|
||||
<xs:element name="capabilityPWCUpdateable" type="xs:boolean"
|
||||
minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element name="capabilityAllVersionsSearchable"
|
||||
type="xs:boolean" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element name="capabilityJoin" minOccurs="1"
|
||||
maxOccurs="1">
|
||||
<xs:element name="capabilityAllVersionsSearchable" type="xs:boolean"
|
||||
minOccurs="1" maxOccurs="1" />
|
||||
<xs:element name="capabilityJoin" minOccurs="1" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="noJoin" />
|
||||
@@ -201,9 +184,10 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:any namespace="##other" processContents="skip" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:simpleType name="baseObjectType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="document" />
|
||||
@@ -212,7 +196,6 @@
|
||||
<xs:enumeration value="policy" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:element name="contentStreamMimetype">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
@@ -220,197 +203,140 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="propertyDefinitionType">
|
||||
<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"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:description" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isInherited" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
<xs:element ref="cmis:propertyType" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:cardinality" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:maxLength" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:schemaURI" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:maxLength" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element ref="cmis:schemaURI" 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"
|
||||
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"
|
||||
maxOccurs="unbounded" />
|
||||
|
||||
<xs:element ref="cmis:updateability" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isQueryable" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isOrderable" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:any processContents="lax" namespace="##other" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:attribute ref="cmis:id" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="allowableActions">
|
||||
<xs:all>
|
||||
<xs:element ref="cmis:canDelete" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:complexType name="allowableActionsType">
|
||||
<xs:sequence>
|
||||
<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" maxOccurs="1" />
|
||||
<xs:element ref="cmis:canDelete" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element ref="cmis:canUpdateProperties" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canGetProperties" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canGetRelationships" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
<xs:element ref="cmis:canGetParents" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canGetDescendants" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canMove" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canDeleteVersion" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canDeleteContent" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canCheckout" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canCancelCheckout" minOccurs="0"
|
||||
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"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canGetAllVersions" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canAddToFolder" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canRemoveFromFolder" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canViewContent" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canAddPolicy" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canRemovePolicy" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:canGetChildren" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="queryType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="cmis:statement" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:searchAllVersions" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:pageSize" minOccurs="0" maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:skipCount" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:returnAllowableActions" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
|
||||
processContents="lax" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="queryType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="cmis:statement" minOccurs="1" maxOccurs="1" />
|
||||
<xs:element ref="cmis:searchAllVersions" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
<xs:element ref="cmis:pageSize" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element ref="cmis:skipCount" minOccurs="0" maxOccurs="1" />
|
||||
<xs:element ref="cmis:returnAllowableActions" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
|
||||
processContents="lax" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="typeType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="cmis:objectId" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:baseType" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:lastModifiedBy" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:creationDate" minOccurs="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"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:baseTypeQueryName" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:parentId" minOccurs="1" maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:description" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isCreatable" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isVersionable" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isFileable" minOccurs="1" maxOccurs="1" />
|
||||
<xs:element ref="cmis:isQueryable" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isContentStreamAllowed" minOccurs="1"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:isControllable" minOccurs="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"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:AllowedTargetTypes" minOccurs="0"
|
||||
maxOccurs="1" />
|
||||
|
||||
<xs:element ref="cmis:property" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
|
||||
<xs:element ref="cmis:property" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:type" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
|
||||
processContents="lax" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<!-- properties -->
|
||||
<xs:element name="properties" type="cmis:propertiesType" />
|
||||
|
||||
<xs:complexType name="propertiesType">
|
||||
<xs:sequence>
|
||||
<xs:element ref="cmis:propertyBoolean" minOccurs="0"
|
||||
@@ -419,8 +345,7 @@
|
||||
maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyDecimal" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyID" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyID" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyInteger" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyString" minOccurs="0"
|
||||
@@ -431,12 +356,10 @@
|
||||
maxOccurs="unbounded" />
|
||||
<xs:element ref="cmis:propertyHTML" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
<xs:any namespace="##other" processContents="lax"
|
||||
minOccurs="0" maxOccurs="unbounded" />
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
|
||||
<xs:element name="propertyString">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -447,7 +370,6 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyHTML">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -458,8 +380,6 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
|
||||
<xs:element name="propertyXML">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -470,7 +390,6 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyBoolean">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -481,7 +400,6 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyID">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -492,7 +410,6 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyURI">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -503,19 +420,16 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyDecimal">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:float">
|
||||
<xs:extension base="xs:decimal">
|
||||
<xs:attribute ref="cmis:name" />
|
||||
<xs:attribute ref="cmis:index" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
|
||||
<xs:element name="propertyDateTime">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
@@ -526,18 +440,16 @@
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="propertyInteger">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:int">
|
||||
<xs:extension base="xs:integer">
|
||||
<xs:attribute ref="cmis:name" />
|
||||
<xs:attribute ref="cmis:index" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:attribute name="name" type="xs:string" />
|
||||
</xs:schema>
|
||||
<!-- EOF -->
|
||||
<!-- EOF -->
|
@@ -5,12 +5,12 @@
|
||||
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 ">
|
||||
|
||||
<!-- all -->
|
||||
<cmis:canDelete>true</cmis:canDelete>
|
||||
|
||||
<!-- if not embedded in entry -->
|
||||
<cmis:parentId>cmis:parentId</cmis:parentId>
|
||||
<cmis:parentUrl>http://tempuri.org</cmis:parentUrl>
|
||||
|
||||
<!-- all -->
|
||||
<cmis:canDelete>true</cmis:canDelete>
|
||||
|
||||
<!-- all -->
|
||||
<cmis:canUpdateProperties>true</cmis:canUpdateProperties>
|
||||
@@ -46,4 +46,4 @@
|
||||
|
||||
|
||||
|
||||
</cmis:allowableActions>
|
||||
</cmis:allowableActions>
|
@@ -23,6 +23,7 @@
|
||||
<cmis:capabilityJoin>innerAndOuter</cmis:capabilityJoin>
|
||||
<cmis:capabilityFullText>fulltextandstructured</cmis:capabilityFullText>
|
||||
</cmis:capabilities>
|
||||
<cmis:cmisVersionsSupported>0.43</cmis:cmisVersionsSupported>
|
||||
<cmis:repositorySpecificInformation>Welcome to ACME 99</cmis:repositorySpecificInformation>
|
||||
</cmis:repositoryInfo>
|
||||
<app:collection cmis:collectionType="unfiled" href="http://www.cmis.org/rep1/unfiled">
|
||||
|
@@ -13,17 +13,21 @@
|
||||
<cmis:baseTypeQueryName>document</cmis:baseTypeQueryName>
|
||||
<cmis:parentId></cmis:parentId>
|
||||
<cmis:description>The document type</cmis:description>
|
||||
|
||||
<cmis:isCreatable>true</cmis:isCreatable>
|
||||
<cmis:isVersionable>true</cmis:isVersionable>
|
||||
<cmis:isFileable>true</cmis:isFileable>
|
||||
<cmis:isQueryable>true</cmis:isQueryable>
|
||||
<cmis:isContentStreamAllowed>true</cmis:isContentStreamAllowed>
|
||||
<cmis:isControllable>true</cmis:isControllable>
|
||||
<cmis:isVersionable>true</cmis:isVersionable>
|
||||
<cmis:contentStreamAllowed>allowed</cmis:contentStreamAllowed>
|
||||
|
||||
|
||||
<!-- optional property definitions -->
|
||||
<cmis:property cmis:id="foo1">
|
||||
<cmis:propertyName>foo1</cmis:propertyName>
|
||||
<cmis:propertyId>propIdForFoo1</cmis:propertyId>
|
||||
<cmis:displayName>foo1</cmis:displayName>
|
||||
<cmis:description>Description of foo1</cmis:description>
|
||||
<cmis:isInherited>false</cmis:isInherited>
|
||||
<cmis:propertyType>String</cmis:propertyType>
|
||||
<cmis:cardinality>Single</cmis:cardinality>
|
||||
<cmis:maxLength>64</cmis:maxLength>
|
||||
@@ -36,4 +40,4 @@
|
||||
<cmis:isOrderable>true</cmis:isOrderable>
|
||||
</cmis:property>
|
||||
|
||||
</cmis:type>
|
||||
</cmis:type>
|
Reference in New Issue
Block a user