mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged DEV/SWIFT to HEAD
26012: OpenCMIS server bug fixes: PWC properties update and document version delete 26205: - integrated the CMIS Client API project into the build - made the local CMIS client use the Alfresco OpenCMIS Extension - updated OpenCMIS 26300: expose all non-child associations through OpenCMIS and check relationship source and target instead of the relationship type 26356: OpenCMIS update 26378: added more CMIS client examples 26380: added helper methods for CMIS client 26500: - fixed CMIS date aspect property encoding - fixed CMIS rendition filter handling 26519: OpenCMIS update 26523: fixed CMISConnectionManager 26596: renamed CMIS JavaScript root objects (cmis -> cmisserver, cmisclient -> cmis) 26651: removed the cmis-client-api project and replaced it with a jar in 3rd-party 26652: - corrected CMIS samples 26656: - removed cmis-client-api from build 26658: - removed the last bit of cmis-client-api 26663: - added CMIS samples (browser and upload) 26742: CMIS webscripts samples update 26743: CMIS webscripts samples update 26939: removed duplicate commons-fileupload 26942: updated commons-lang to 2.6 26943: updated OpenCMIS (browser binding is now included in the server framework) 26953: refactored OpenCMIS client integration 26974: Update classpath for Florian - OpenCMIS browser bindings are now rolled into the main jar, no need for their own one 26975: removed outdated CMIS browser binding demo page 27048: port of the Spring Surf CMIS browser plus a few new features (create folder, create document, delete object) 27077: bug fix: CMIS id for associations 27079: OpenCMIS update 27085: added check if CMIS is supported 27086: OpenCMIS client bindings update (force JAX-WS RI) 27138: clean up 27764: CMIS default connection handling 27879: OpenCMIS client: moved server definitions to separate config file 27880: OpenCMIS client: removed test repositories from configuration 27918: changed CMIS server configuration tag name to match Spring Surf configuration 27920: enabled relationships in CMIS browser 27924: Updated Spring Surf and added the Spring Surf CMIS framework [Merge note: Kept most recent HEAD jars where conflicts occured] 27926: Updated Spring Surf source jars [Merge note: Kept most recent HEAD jars where conflicts occured] git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28219 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -34,5 +34,5 @@ script:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmis.applyACL(model.node, principalIds, permissions);
|
cmisserver.applyACL(model.node, principalIds, permissions);
|
||||||
}
|
}
|
||||||
|
@@ -3,24 +3,24 @@
|
|||||||
script:
|
script:
|
||||||
{
|
{
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null || model.filter == "")
|
if (model.filter === null || model.filter == "")
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// ACL
|
// ACL
|
||||||
model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true";
|
model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true";
|
||||||
|
|
||||||
// Change log
|
// Change log
|
||||||
var changeLogToken = args[cmis.ARG_CHANGE_LOG_TOKEN];
|
var changeLogToken = args[cmisserver.ARG_CHANGE_LOG_TOKEN];
|
||||||
if (changeLogToken == "")
|
if (changeLogToken == "")
|
||||||
{
|
{
|
||||||
changeLogToken = null;
|
changeLogToken = null;
|
||||||
}
|
}
|
||||||
var maxItems = args[cmis.ARG_MAX_ITEMS];
|
var maxItems = args[cmisserver.ARG_MAX_ITEMS];
|
||||||
var maxItemsInt = maxItems != null && maxItems != "" ? parseInt(maxItems) : null;
|
var maxItemsInt = maxItems != null && maxItems != "" ? parseInt(maxItems) : null;
|
||||||
model.changeLog = cmis.getChangeLog(changeLogToken, maxItemsInt);
|
model.changeLog = cmisserver.getChangeLog(changeLogToken, maxItemsInt);
|
||||||
|
|
||||||
// return value
|
// return value
|
||||||
1;
|
1;
|
||||||
|
@@ -4,7 +4,7 @@ script:
|
|||||||
{
|
{
|
||||||
// locate (optional) folder
|
// locate (optional) folder
|
||||||
model.folder = null;
|
model.folder = null;
|
||||||
var folderId = args[cmis.ARG_FOLDER_ID];
|
var folderId = args[cmisserver.ARG_FOLDER_ID];
|
||||||
if (folderId !== null)
|
if (folderId !== null)
|
||||||
{
|
{
|
||||||
var folder = getObjectFromObjectId(folderId);
|
var folder = getObjectFromObjectId(folderId);
|
||||||
@@ -25,25 +25,25 @@ script:
|
|||||||
model.includeDescendants = (args.includeDescendants == "true") ? true : false;
|
model.includeDescendants = (args.includeDescendants == "true") ? true : false;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
@@ -51,7 +51,7 @@ script:
|
|||||||
|
|
||||||
// retrieve checked-out
|
// retrieve checked-out
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var paged = cmis.queryCheckedOut(person.properties.userName, model.folder, model.includeDescendants, page);
|
var paged = cmisserver.queryCheckedOut(person.properties.userName, model.folder, model.includeDescendants, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,7 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// checkout
|
// checkout
|
||||||
model.pwc = cmis.checkOut(objectId);
|
model.pwc = cmisserver.checkOut(objectId);
|
||||||
|
|
||||||
// setup for 201 Created response
|
// setup for 201 Created response
|
||||||
// TODO: set Content-Location
|
// TODO: set Content-Location
|
||||||
|
@@ -11,8 +11,8 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// handle filters
|
// handle filters
|
||||||
model.types = args[cmis.ARG_TYPES] === null ? cmis.defaultTypesFilter : args[cmis.ARG_TYPES];
|
model.types = args[cmisserver.ARG_TYPES] === null ? cmisserver.defaultTypesFilter : args[cmisserver.ARG_TYPES];
|
||||||
if (!cmis.isValidTypesFilter(model.types))
|
if (!cmisserver.isValidTypesFilter(model.types))
|
||||||
{
|
{
|
||||||
status.code = 400;
|
status.code = 400;
|
||||||
status.message = "Types filter '" + model.types + "' unknown";
|
status.message = "Types filter '" + model.types + "' unknown";
|
||||||
@@ -21,28 +21,28 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// order by
|
// order by
|
||||||
var orderBy = args[cmis.ARG_ORDER_BY];
|
var orderBy = args[cmisserver.ARG_ORDER_BY];
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
@@ -50,7 +50,7 @@ script:
|
|||||||
|
|
||||||
// retrieve children
|
// retrieve children
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var paged = cmis.queryChildren(model.node, model.types, orderBy, page);
|
var paged = cmisserver.queryChildren(model.node, model.types, orderBy, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@ script:
|
|||||||
model.parent = parent.node;
|
model.parent = parent.node;
|
||||||
|
|
||||||
// versioning state
|
// versioning state
|
||||||
var versioningState = args[cmis.ARG_VERSIONING_STATE];
|
var versioningState = args[cmisserver.ARG_VERSIONING_STATE];
|
||||||
if (versioningState === null || versioningState.length == 0)
|
if (versioningState === null || versioningState.length == 0)
|
||||||
{
|
{
|
||||||
versioningState = "major";
|
versioningState = "major";
|
||||||
@@ -32,7 +32,7 @@ script:
|
|||||||
var object = entry.getExtension(atom.names.cmisra_object);
|
var object = entry.getExtension(atom.names.cmisra_object);
|
||||||
var objectIdProp = (object !== null) ? object.objectId : null;
|
var objectIdProp = (object !== null) ? object.objectId : null;
|
||||||
var objectId = (objectIdProp !== null) ? objectIdProp.nativeValue : null;
|
var objectId = (objectIdProp !== null) ? objectIdProp.nativeValue : null;
|
||||||
var sourceFolderId = args[cmis.ARG_SOURCE_FOLDER_ID];
|
var sourceFolderId = args[cmisserver.ARG_SOURCE_FOLDER_ID];
|
||||||
var node = null;
|
var node = null;
|
||||||
|
|
||||||
if (objectId == null)
|
if (objectId == null)
|
||||||
@@ -54,7 +54,7 @@ script:
|
|||||||
}
|
}
|
||||||
node = object.node;
|
node = object.node;
|
||||||
|
|
||||||
cmis.addObjectToFolder(node, model.parent);
|
cmisserver.addObjectToFolder(node, model.parent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -69,7 +69,7 @@ script:
|
|||||||
node = object.node;
|
node = object.node;
|
||||||
|
|
||||||
// perform move
|
// perform move
|
||||||
cmis.moveObject(node, model.parent, sourceFolderId);
|
cmisserver.moveObject(node, model.parent, sourceFolderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// success
|
// success
|
||||||
|
@@ -0,0 +1,77 @@
|
|||||||
|
<#macro head>
|
||||||
|
<head>
|
||||||
|
<title><#nested></title>
|
||||||
|
<link type="text/css" rel="stylesheet" href="${url.context}/cmis-browser-app/css/style.css" />
|
||||||
|
</head>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro header>
|
||||||
|
<div id="header">
|
||||||
|
<img id="cmis-logo" src="${url.context}/cmis-browser-app/images/cmis-browser-logo.png" width="222" height="35" />
|
||||||
|
<a href="http://chemistry.apache.org" target="_blank"><img id="apachec-logo"src="${url.context}/cmis-browser-app/images/apache_chemistry.png" width="169" height="21" /></a>
|
||||||
|
<img id="divider" src="${url.context}/cmis-browser-app/images/divider.jpg" width="2" height="28"/>
|
||||||
|
<a href="http://www.springsurf.org/" target="_blank"><img id="surf-logo" src="${url.context}/cmis-browser-app/images/surf-logo.png" width="65" height="26" /></a>
|
||||||
|
</div>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro navigation>
|
||||||
|
<@header/>
|
||||||
|
<div id="navigation">
|
||||||
|
<ul id="pathlist">
|
||||||
|
<li><a class="pathlinks" href="${url.serviceContext}/cmis-browser-app/connections">CMIS Repositories</a> :</li>
|
||||||
|
<li><#nested></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro connectionNavigation connection>
|
||||||
|
<@header/>
|
||||||
|
<div id="navigation">
|
||||||
|
<ul id="pathlist">
|
||||||
|
<li><a class="pathlinks" href="${url.serviceContext}/cmis-browser-app/connections">CMIS Repositories</a> :</li>
|
||||||
|
<li>Repository <a class="pathlinks" href="<@cmisContextUrl connection.name/>/repo">${connection.server.description!""} (${connection.userName!"<i>anonymous</i>"})</a> : </li>
|
||||||
|
<li><#nested></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro cmisContextUrl connectionId=""><#if connectionId != "">${url.serviceContext}/cmis-browser-app/c/${connectionId}<#-- TODO: remove all the hard-coded dirtyness --><#elseif url.match?starts_with("/cmis-browser-app/c/")>${url.serviceContext}/cmis-browser-app/c/${url.templateArgs["conn"]}<#else>${url.serviceContext}/cmis-browser-app</#if></#macro>
|
||||||
|
|
||||||
|
<#macro propertyvalue property connectionName="">
|
||||||
|
<#-- TODO: consider using single as well as list representations of value -->
|
||||||
|
<#list property.values as val>
|
||||||
|
<#-- TODO: use property definition type instead of property id -->
|
||||||
|
<#if property.id?? && property.id == "cmis:objectId">
|
||||||
|
<@value val ; v><a href="<@cmisContextUrl connectionName/>/object?id=${v}">${v}</a></@value>
|
||||||
|
<#else>
|
||||||
|
<@value val ; v>${v}</@value>
|
||||||
|
</#if>
|
||||||
|
<#if val_has_next><#nested></#if>
|
||||||
|
</#list>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro value val>
|
||||||
|
<#if val?is_hash && val.time??><#nested val.time?datetime>
|
||||||
|
<#elseif val?is_string><#nested val>
|
||||||
|
<#elseif val?is_number><#nested val?c>
|
||||||
|
<#elseif val?is_boolean><#nested val?string>
|
||||||
|
<#elseif val?is_date><#nested val?datetime>
|
||||||
|
<#else><#nested val>
|
||||||
|
</#if>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro resultsHeader skipCount pageNumItems>
|
||||||
|
<#if pageNumItems == 0>No Results Found<#else>Results <b>${skipCount + 1}</b> - <b>${skipCount + pageNumItems}</#if></b>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro objectImage baseTypeId="cmis:document">
|
||||||
|
<#if baseTypeId == "cmis:folder"><@image "folder-yellow"/><#else><@image "document"/></#if>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro image image height=-1 width=-1>
|
||||||
|
<img<#if height !=-1> height="${height}"</#if><#if width !=-1> width="${width}"</#if> src="${url.context}/cmis-browser-app/images/${image}<#if image?index_of(".") == -1>.gif</#if>">
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro button name>
|
||||||
|
<input class="button" type="submit" value="${name}" onmouseover="this.className='btn-hover'" onmouseout="this.className='button'">
|
||||||
|
</#macro>
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Connect</shortname>
|
||||||
|
<url>/cmis-browser-app/connect</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,35 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Connect</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>Connect</@cmisLib.navigation>
|
||||||
|
<div id="content">
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="3">${serverDefinition.name?html} (${serverDefinition.description?html})</th></tr>
|
||||||
|
<#if error??>
|
||||||
|
<form action="${url.service}" method="post">
|
||||||
|
<input type="hidden" name="server" value="${serverDefinition.name}">
|
||||||
|
<tr><td>Error:</td><td style="color:red">${error?html}</td></tr>
|
||||||
|
<tr><td>Username:</td><td><input type="text" name="username" size="30"/></td></tr>
|
||||||
|
<tr><td>Password:</td><td><input type="password" name="password" size="30"/></td></tr>
|
||||||
|
<tr><td>Repository Id:</td><td><input type="text" name="repositoryid" size="30"/> (leave empty for the first repository)</td></tr>
|
||||||
|
<tr><td></td><td><@cmisLib.button "connect"/></td></tr>
|
||||||
|
</form>
|
||||||
|
<#else>
|
||||||
|
<table>
|
||||||
|
<tr><td class="headercol">Name:</td><td>${repoinfo.name}</td></tr>
|
||||||
|
<tr><td class="headercol">Id:</td><td>${repoinfo.id}<td></tr>
|
||||||
|
<tr><td class="headercol">Product Name:</td><td>${repoinfo.productName}<td></tr>
|
||||||
|
<tr><td class="headercol">Product Version:</td><td>${repoinfo.productVersion}<td></tr>
|
||||||
|
<tr><td class="headercol">Vendor:</td><td>${repoinfo.vendorName}<td></tr>
|
||||||
|
<tr><td class="headercol">CMIS Version:</td><td>${repoinfo.cmisVersionSupported}<td></tr>
|
||||||
|
<tr><td></td><td><a href="<@cmisLib.cmisContextUrl/>/connections">Return to the connection page</a></td></tr>
|
||||||
|
<tr><td></td><td><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${rootFolder.id?url}">Browse the root folder "${rootFolder.name?html}"</a></td></tr>
|
||||||
|
<tr><td></td><td><a href="<@cmisLib.cmisContextUrl conn.id/>/query">Query the repository</a></td></tr>
|
||||||
|
</#if>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,38 @@
|
|||||||
|
var serverName = args["server"];
|
||||||
|
var connectionId = "cmis-browser-" + serverName;
|
||||||
|
|
||||||
|
// get server definition
|
||||||
|
var serverDefinition = cmis.getServerDefinition(serverName);
|
||||||
|
if (serverDefinition == null) {
|
||||||
|
status.code = 400;
|
||||||
|
status.message = "Unknown server!";
|
||||||
|
status.redirect = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// clean up old connection
|
||||||
|
var connection = cmis.getConnection(connectionId);
|
||||||
|
if (connection != null) {
|
||||||
|
connection.close();
|
||||||
|
connection = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
model.serverDefinition = serverDefinition;
|
||||||
|
|
||||||
|
// connect
|
||||||
|
try {
|
||||||
|
if (args["username"] != null && args["username"].length > 0) {
|
||||||
|
if (args["repositoryid"] != null && args["repositoryid"].length > 0) {
|
||||||
|
serverDefinition = cmis.createServerDefinition(serverDefinition, args["username"], args["password"], args["repositoryid"])
|
||||||
|
} else {
|
||||||
|
serverDefinition = cmis.createServerDefinition(serverDefinition, args["username"], args["password"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
connection = cmis.createUserConnection(serverDefinition, connectionId);
|
||||||
|
|
||||||
|
model.conn = connection;
|
||||||
|
model.repoinfo = model.conn.session.repositoryInfo;
|
||||||
|
model.rootFolder = model.conn.session.rootFolder;
|
||||||
|
} catch (e) {
|
||||||
|
model.error = (e.javaException == null ? e.rhinoException.message : e.javaException.message);
|
||||||
|
}
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Connections</shortname>
|
||||||
|
<url>/cmis-browser-app/c/{conn}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,10 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Disconnected Connection</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>${conn.id} disconnected</@cmisLib.navigation>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,5 @@
|
|||||||
|
script:
|
||||||
|
{
|
||||||
|
model.conn = cmis.getConnection(url.templateArgs["conn"]);
|
||||||
|
model.conn.close();
|
||||||
|
}
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Connections</shortname>
|
||||||
|
<url>/cmis-browser-app/connections</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,56 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Connections</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>Connections</@cmisLib.navigation>
|
||||||
|
|
||||||
|
<div id="content">
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="9"><b>My Connections</b></th></tr>
|
||||||
|
<#if connections?size == 0>
|
||||||
|
<tr><td colspan="9">None</td></tr>
|
||||||
|
</table>
|
||||||
|
<#else>
|
||||||
|
<tr><td><b>Server</b></td><td></td><td><b>Repository</b></td><td><b>Connection</b></td><td><b>User</b><td><td></td><td></td><td></td></tr>
|
||||||
|
<#list connections as conn>
|
||||||
|
<tr>
|
||||||
|
<td>${conn.server.name!""}</td>
|
||||||
|
<td>${conn.server.description!""}</td>
|
||||||
|
<td>${conn.session.repositoryInfo.name}</td>
|
||||||
|
<td>${conn.id}</td>
|
||||||
|
<td>${conn.userName}</td>
|
||||||
|
<td><a href="<@cmisLib.cmisContextUrl conn.id/>/repo">info</a></td>
|
||||||
|
<td><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${conn.session.rootFolder.id}">browse</a></td>
|
||||||
|
<td><#if conn.supportsQuery()><a href="<@cmisLib.cmisContextUrl conn.id/>/query">query</a></#if></td>
|
||||||
|
<td><form action="<@cmisLib.cmisContextUrl conn.id/>" method="post"><input type="hidden" name="alf_method" value="delete"><@cmisLib.button "disconnect"/></form></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table>
|
||||||
|
<tr><td><a href="<@cmisLib.cmisContextUrl/>/federatedquery">query all</a></td></tr>
|
||||||
|
</table>
|
||||||
|
</#if>
|
||||||
|
<br>
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="3"><b>Available CMIS Servers</b></th></tr>
|
||||||
|
<#if servers?size == 0>
|
||||||
|
<tr><td colspan="3">None</td></tr>
|
||||||
|
<#else>
|
||||||
|
<tr><td><b>Server</b></td><td></td><td></td></tr>
|
||||||
|
<#list servers as server>
|
||||||
|
<tr>
|
||||||
|
<td>${server.name!""}</td>
|
||||||
|
<td>${server.description!""}</td>
|
||||||
|
<td><form action="<@cmisLib.cmisContextUrl/>/connect" method="post"><input type="hidden" name="server" value="${server.name}"/><@cmisLib.button "connect"/></form></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</#if>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,6 @@
|
|||||||
|
// create default connection if it doesn't exist yet
|
||||||
|
var defaultConnection = cmis.getConnection();
|
||||||
|
|
||||||
|
// get all connections and servers
|
||||||
|
model.connections = cmis.getUserConnections();
|
||||||
|
model.servers = cmis.getServerDefinitions();
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Rendition Stream</shortname>
|
||||||
|
<url>/cmisbrowser/content?id={objectId}</url>
|
||||||
|
<url>/cmisbrowser/c/{conn}/content?id={objectId}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Federated Query</shortname>
|
||||||
|
<url>/cmis-browser-app/federatedquery?statement={statement?}&maxItems={maxItems?}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,70 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>CMIS Federated Query Tool</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>Federated Query Tool: ${connectionCount} Connection<#if connectionCount != 1>s</#if></@cmisLib.navigation>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<form id="query" name="query" action="<@cmisLib.cmisContextUrl/>/federatedquery">
|
||||||
|
<table class="form">
|
||||||
|
<tr><td valign="top">Statement</td><td><textarea name="statement" cols=80 rows=5>${formattedStatement!defaultStatement}</textarea></td></tr>
|
||||||
|
<tr><td>Page size</td><td><input class="field" type="text" name="maxItems" value="${maxItems}"/></td></tr>
|
||||||
|
<tr><td></td><td><@cmisLib.button "Execute Query"/></td></tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<#if results??>
|
||||||
|
<#list results as result>
|
||||||
|
<hr>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<#if result.skipCount gt 0>
|
||||||
|
<td><a class="pag-enabled" href="<@cmisLib.cmisContextUrl/>/federatedquery?statement=${encodeuri(formattedStatement)}&<@decSkipCounts results result.conn/>&maxItems=${maxItems}">← Prev</a></td>
|
||||||
|
<#else>
|
||||||
|
<td><a class="pag-disabled" href="#">← Prev</td>
|
||||||
|
</#if>
|
||||||
|
<td><@cmisLib.resultsHeader result.skipCount result.pageNumItems/> for ${result.conn.server.name?html} (${result.conn.server.description!""}) (${result.conn.userName!"<i>anonymous</i>"?html})</td>
|
||||||
|
<#if result.hasMoreItems>
|
||||||
|
<td><a class="pag-enabled" href="<@cmisLib.cmisContextUrl/>/federatedquery?statement=${encodeuri(formattedStatement)}&<@incSkipCounts results result.conn/>&maxItems=${maxItems}">Next →</a></td>
|
||||||
|
<#else>
|
||||||
|
<td><a class="pag-disabled" href="#">Next →</td>
|
||||||
|
</#if>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<table class="details">
|
||||||
|
<#list result.rows as row>
|
||||||
|
<#assign properties = row.properties>
|
||||||
|
<#if row_index == 0>
|
||||||
|
<tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<th><b>${property.queryName!property.displayName!property.id}</b></th>
|
||||||
|
</#list>
|
||||||
|
</tr>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<td><@cmisLib.propertyvalue property result.conn.id>,<br></@cmisLib.propertyvalue></td>
|
||||||
|
</#list>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</#list>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<#macro incSkipCounts results conn>
|
||||||
|
<#list results as result>${result.conn.id}_skipCount=<#if result.conn == conn>${result.skipCount + maxItems}<#else>${result.skipCount}</#if><#if result_has_next>&</#if></#list>
|
||||||
|
</#macro>
|
||||||
|
|
||||||
|
<#macro decSkipCounts results conn>
|
||||||
|
<#list results as result>${result.conn.id}_skipCount=<#if result.conn == conn>${result.skipCount - maxItems}<#else>${result.skipCount}</#if><#if result_has_next>&</#if></#list>
|
||||||
|
</#macro>
|
@@ -0,0 +1,37 @@
|
|||||||
|
script:
|
||||||
|
{
|
||||||
|
var connections = cmis.getUserConnections();
|
||||||
|
|
||||||
|
model.connectionCount = connections.size();
|
||||||
|
model.defaultStatement = "select cmis:objectId, cmis:name, cmis:objectTypeId\nfrom cmis:document";
|
||||||
|
model.formattedStatement = args.statement;
|
||||||
|
model.maxItems = (args.maxItems == null) ? 5 : parseInt(args.maxItems);
|
||||||
|
|
||||||
|
// execute query
|
||||||
|
if (model.formattedStatement != null)
|
||||||
|
{
|
||||||
|
var statement = model.formattedStatement.replace(/\n/g, " ").replace(/\r/g, "");
|
||||||
|
var results = new Array();
|
||||||
|
|
||||||
|
for (var i = 0; i < connections.size(); i++)
|
||||||
|
{
|
||||||
|
if(!connections.get(i).supportsQuery()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var skipCount = (args[connections.get(i).id + "_skipCount"] == null) ? 0 : parseInt(args[connections.get(i).id + "_skipCount"]);
|
||||||
|
skipCount = (skipCount < 0) ? 0 : skipCount;
|
||||||
|
var iterable = connections.get(i).session.query(statement, false).skipTo(skipCount).getPage(model.maxItems);
|
||||||
|
|
||||||
|
var result = new Object();
|
||||||
|
result.conn = connections.get(i);
|
||||||
|
result.rows = iterable.iterator();
|
||||||
|
result.skipCount = skipCount;
|
||||||
|
result.hasMoreItems = iterable.hasMoreItems;
|
||||||
|
result.pageNumItems = iterable.pageNumItems;
|
||||||
|
results.push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
model.results = results;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Folder Browser</shortname>
|
||||||
|
<url>/cmis-browser-app/folder?id={objectId}</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/folder?id={objectId}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,67 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>${folder.name?html} Folder</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.connectionNavigation conn>Folder ${folder.name?html} <a href="<@cmisLib.cmisContextUrl conn.id/>/object?id=${folder.id?url}">details</a></@cmisLib.connectionNavigation>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<table id="directory-list">
|
||||||
|
<#if folderParent?exists>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${folderParent.id?url}"><@cmisLib.image "up"/></a></td>
|
||||||
|
</tr>
|
||||||
|
</#if>
|
||||||
|
<#list folderChildren as child>
|
||||||
|
<tr>
|
||||||
|
<#if child.baseType.id == "cmis:folder">
|
||||||
|
<td><@cmisLib.objectImage child.baseType.id/></td>
|
||||||
|
<td><#if child.lastModifiedBy??>${child.lastModifiedBy?html}</#if></td>
|
||||||
|
<td></td>
|
||||||
|
<td><#if child.lastModificationDate??>${child.lastModificationDate.time?datetime}</#if></td>
|
||||||
|
<td><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${child.id?url}">${child.name?html}</a></td>
|
||||||
|
<#else>
|
||||||
|
<td><@cmisLib.objectImage child.baseType.id?html/></td>
|
||||||
|
<td><#if child.lastModifiedBy??>${child.lastModifiedBy?html}</#if></td>
|
||||||
|
<td style="text-align: right;"><#if child.contentStreamLength??>${child.contentStreamLength?c}</#if></td>
|
||||||
|
<td><#if child.lastModificationDate??>${child.lastModificationDate.time?datetime}</#if></td>
|
||||||
|
<td><a href="<@cmisLib.cmisContextUrl conn.id/>/object?id=${child.id?url}">${child.name?html}</a></td>
|
||||||
|
</#if>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/folder" method="post">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="parent" value="${folder.id}">
|
||||||
|
<input type="hidden" name="type" value="folder">
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="2">Create new folder</th></tr>
|
||||||
|
<tr><td>Name:</td><td><input type="text" name="name" size="60"/></td></tr>
|
||||||
|
<tr><td>Object Type:</td><td><input type="text" name="objectType" value="cmis:folder" size="60"/></td></tr>
|
||||||
|
<tr><td></td><td><@cmisLib.button "create"/></td></tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/folder" method="post" enctype="multipart/form-data">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="parent" value="${folder.id}">
|
||||||
|
<input type="hidden" name="type" value="document">
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="2">Upload document</th></tr>
|
||||||
|
<tr><td>File:</td><td><input type="file" name="file" size="60"/></td></tr>
|
||||||
|
<tr><td>Name:</td><td><input type="text" name="name" size="60"/></td></tr>
|
||||||
|
<tr><td>Object Type:</td><td><input type="text" name="objectType" value="cmis:document" size="60"/></td></tr>
|
||||||
|
<tr><td></td><td><@cmisLib.button "upload"/></td></tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,15 @@
|
|||||||
|
script:
|
||||||
|
{
|
||||||
|
model.conn = cmis.getConnection(url.templateArgs["conn"]);
|
||||||
|
model.folder = model.conn.session.getObject(args.id);
|
||||||
|
model.folderParent = model.folder.folderParent;
|
||||||
|
|
||||||
|
var oc = model.conn.session.createOperationContext();
|
||||||
|
oc.setFilterString("cmis:name,cmis:objectId,cmis:baseType,cmis:lastModifiedBy,cmis:lastModificationDate,cmis:contentStreamLength");
|
||||||
|
oc.setMaxItemsPerPage(10000);
|
||||||
|
oc.setIncludeAcls(false);
|
||||||
|
oc.setIncludeAllowableActions(false);
|
||||||
|
oc.setIncludePolicies(false);
|
||||||
|
oc.setIncludePathSegments(false);
|
||||||
|
model.folderChildren = model.folder.getChildren(oc).iterator();
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Folder Browser</shortname>
|
||||||
|
<url>/cmis-browser-app/folder</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/folder</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,30 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Connect</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>Create</@cmisLib.navigation>
|
||||||
|
<div id="content">
|
||||||
|
<#if error??>
|
||||||
|
<h3 style="color: red;">${error?html}</h3>
|
||||||
|
<#else>
|
||||||
|
<h3>${object.name?html} created!</h3>
|
||||||
|
<table class="details">
|
||||||
|
<#assign properties = object.properties>
|
||||||
|
<tr><th colspan="4"><b>Properties</b></th></tr>
|
||||||
|
<tr><td><b>Id</b></td><td><b>Type</b></td><td><b>Cardinality</b></td><td><b>Value(s)</b></td></tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<tr>
|
||||||
|
<td>${property.id?html}</td>
|
||||||
|
<td>${property.type?capitalize}</td>
|
||||||
|
<td><#if property.isMultiValued()>multiple</#if></td>
|
||||||
|
<td><@cmisLib.propertyvalue property conn.id>,<br></@cmisLib.propertyvalue></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</#if>
|
||||||
|
<p><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${parent.id?url}">Return to folder</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,29 @@
|
|||||||
|
script: {
|
||||||
|
try {
|
||||||
|
model.conn = cmis.getConnection(args["conn"]);
|
||||||
|
model.parent = model.conn.session.getObject(args["parent"]);
|
||||||
|
|
||||||
|
var properties = cmis.createMap();
|
||||||
|
properties["cmis:name"] = args["name"];
|
||||||
|
properties["cmis:objectTypeId"] = args["objectType"];
|
||||||
|
|
||||||
|
if (args["type"] == "document") {
|
||||||
|
var contentStream = null;
|
||||||
|
|
||||||
|
for each (field in formdata.fields) {
|
||||||
|
if (field.isFile) {
|
||||||
|
contentStream = cmis.createContentStream(field.filename, field.content);
|
||||||
|
|
||||||
|
if (properties["cmis:name"] == null || properties["cmis:name"].length == 0) {
|
||||||
|
properties["cmis:name"] = String(field.filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
model.object = model.parent.createDocument(properties, contentStream, null);
|
||||||
|
} else {
|
||||||
|
model.object = model.parent.createFolder(properties);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
model.error = (e.javaException == null ? e.rhinoException.message : e.javaException.message);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Object Details</shortname>
|
||||||
|
<url>/cmis-browser-app/object</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/object</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,38 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Delete</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.navigation>Connect</@cmisLib.navigation>
|
||||||
|
<div id="content">
|
||||||
|
<#if error??>
|
||||||
|
<h3 style="color: red;">${error?html}</h3>
|
||||||
|
<#else>
|
||||||
|
<#if needsConfirmation??>
|
||||||
|
<h3>Delete ${object.name?html}?</h3>
|
||||||
|
<table><tr>
|
||||||
|
<td>
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/object" method="post">
|
||||||
|
<input type="hidden" name="alf_method" value="delete">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="id" value="${object.id}">
|
||||||
|
<input type="hidden" name="confirm" value="1">
|
||||||
|
<@cmisLib.button "Yes"/>
|
||||||
|
</form>
|
||||||
|
</td><td>
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/object" method="get">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="id" value="${object.id}">
|
||||||
|
<@cmisLib.button "No"/>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr></table>
|
||||||
|
<#else>
|
||||||
|
<h3>${object.name?html} deleted!</h3>
|
||||||
|
</#if>
|
||||||
|
</#if>
|
||||||
|
<p><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${parent.id?url}">Return to folder</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,19 @@
|
|||||||
|
script: {
|
||||||
|
try {
|
||||||
|
model.conn = cmis.getConnection(args["conn"]);
|
||||||
|
model.object = model.conn.session.getObject(args["id"]);
|
||||||
|
model.parent = model.object.parents.get(0);
|
||||||
|
|
||||||
|
if (args["confirm"] == "1") {
|
||||||
|
if (model.object.baseType.id == "cmis:folder") {
|
||||||
|
model.object.deleteTree(true, null, true);
|
||||||
|
} else {
|
||||||
|
model.object["delete"](true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
model.needsConfirmation = true;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
model.error = (e.javaException == null ? e.rhinoException.message : e.javaException.message);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Object Details</shortname>
|
||||||
|
<url>/cmis-browser-app/object?id={objectId}</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/object?id={objectId}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,104 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head><#if isDoc>Document ${object.name}<#else>Folder ${object.path}</#if></@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.connectionNavigation conn><#if isDoc>Document ${object.name}<#else>Folder ${object.path}</#if> details</@cmisLib.connectionNavigation>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<#if parent?exists>
|
||||||
|
<table>
|
||||||
|
<tr><td><a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${parent.id}">Parent Folder ${parent.path}</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<table><tr>
|
||||||
|
|
||||||
|
<#if isDoc>
|
||||||
|
<#if object.contentStreamLength?? && object.contentStreamLength gt 0>
|
||||||
|
<td>
|
||||||
|
<#if object.contentStreamMimeType??>
|
||||||
|
<#assign mimetype = " (${object.contentStreamMimeType?html})">
|
||||||
|
<#else>
|
||||||
|
<#assign mimetype = "">
|
||||||
|
</#if>
|
||||||
|
<form action="${url.serviceContext}/cmis/content" method="get">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="id" value="${object.id}">
|
||||||
|
<@cmisLib.button "View Content${mimetype}"/>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</#if>
|
||||||
|
<#elseif isFolder>
|
||||||
|
<td>
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/folder" method="get">
|
||||||
|
<input type="hidden" name="id" value="${object.id}">
|
||||||
|
<@cmisLib.button "View Children"/>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<form action="<@cmisLib.cmisContextUrl conn.id/>/object" method="post">
|
||||||
|
<input type="hidden" name="alf_method" value="delete">
|
||||||
|
<input type="hidden" name="conn" value="${conn.id}">
|
||||||
|
<input type="hidden" name="id" value="${object.id}">
|
||||||
|
<@cmisLib.button "Delete"/>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<#assign renditions = object.renditions![]>
|
||||||
|
<#if renditions?size gt 0>
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="3"><b>Renditions</b></th></tr>
|
||||||
|
<tr><td><b>Kind</b></td><td><b>Mimetype</b></td><td><b>Length</b></td></tr>
|
||||||
|
<#list renditions as rendition>
|
||||||
|
<tr>
|
||||||
|
<td><a href="${url.serviceContext}/cmis/content?id=${object.id?url}&conn=${conn.id?url}&stream=${rendition.streamId?url}">${rendition.kind?html}</a></td>
|
||||||
|
<td>${rendition.mimeType}</td>
|
||||||
|
<td><#if rendition.length != -1>${rendition.length?c}</#if></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<table class="details">
|
||||||
|
<#assign properties = object.properties>
|
||||||
|
<tr><th colspan="4"><b>Properties</b></th></tr>
|
||||||
|
<tr><td><b>Id</b></td><td><b>Type</b></td><td><b>Cardinality</b></td><td><b>Value(s)</b></td></tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<tr>
|
||||||
|
<td>${property.id?html}</td>
|
||||||
|
<td>${property.type?capitalize}</td>
|
||||||
|
<td><#if property.isMultiValued()>multiple</#if></td>
|
||||||
|
<td><@cmisLib.propertyvalue property conn.id>,<br></@cmisLib.propertyvalue></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table class="details">
|
||||||
|
<tr><th colspan="3"><b>Relationships</b></th></tr>
|
||||||
|
<tr><td><b>Id</b></td><td><b>Name</b></td><td><b>Related Objects</b></td></tr>
|
||||||
|
<#assign relationships = object.relationships![]>
|
||||||
|
<#if relationships??>
|
||||||
|
<#list relationships as relationship>
|
||||||
|
<tr>
|
||||||
|
<td>${relationship.id?html}</td>
|
||||||
|
<td>${relationship.name?html}</td>
|
||||||
|
<td><a href="<@cmisLib.cmisContextUrl conn.id/>/object?id=${relationship.source.id?url}">${relationship.source.name?html}</a> →
|
||||||
|
<a href="<@cmisLib.cmisContextUrl conn.id/>/object?id=${relationship.target.id?url}">${relationship.target.name?html}</a></td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</#if>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,18 @@
|
|||||||
|
script:
|
||||||
|
{
|
||||||
|
model.conn = cmis.getConnection(url.templateArgs["conn"]);
|
||||||
|
var operationContext = model.conn.session.createOperationContext();
|
||||||
|
operationContext.renditionFilterString = "*";
|
||||||
|
operationContext.includeRelationships = Packages.org.apache.chemistry.opencmis.commons.enums.IncludeRelationships.BOTH;
|
||||||
|
model.object = model.conn.session.getObject(args.id, operationContext);
|
||||||
|
model.isDoc = (model.object.baseType.id == "cmis:document");
|
||||||
|
model.isFolder = (model.object.baseType.id == "cmis:folder");
|
||||||
|
if (model.isDoc)
|
||||||
|
{
|
||||||
|
var parents = model.object.parents;
|
||||||
|
if (parents.size() > 0)
|
||||||
|
{
|
||||||
|
model.parent = parents.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Query</shortname>
|
||||||
|
<url>/cmis-browser-app/query?statement={statement?}&skipCount={skipCount?}&maxItems={maxItems?}</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/query?statement={statement?}&skipCount={skipCount?}&maxItems={maxItems?}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,60 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>CMIS Query Tool</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.connectionNavigation conn>Query Tool</@cmisLib.connectionNavigation>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<form id="query" name="query" action="<@cmisLib.cmisContextUrl conn.id/>/query">
|
||||||
|
<table class="form">
|
||||||
|
<tr><td valign="top">Statement</td><td><textarea name="statement" cols=80 rows=5>${formattedStatement!defaultStatement}</textarea></td></tr>
|
||||||
|
<tr><td>Page size</td><td><input class="field" type="text" name="maxItems" value="${maxItems}"/></td></tr>
|
||||||
|
<tr><td></td><td><@cmisLib.button "Execute Query"/></td></tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<#if rows??>
|
||||||
|
<hr>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<#if skipCount gt 0>
|
||||||
|
<td><a class="pag-enabled" href="<@cmisLib.cmisContextUrl conn.id/>/query?statement=${encodeuri(formattedStatement)}&skipCount=${skipCount - maxItems}&maxItems=${maxItems}">← Prev</a></td>
|
||||||
|
<#else>
|
||||||
|
<td><a class="pag-disabled" href="#">← Prev</td>
|
||||||
|
</#if>
|
||||||
|
<td><@cmisLib.resultsHeader skipCount pageNumItems/></td>
|
||||||
|
<#if hasMoreItems>
|
||||||
|
<td><a class="pag-enabled" href="<@cmisLib.cmisContextUrl conn.id/>/query?statement=${encodeuri(formattedStatement)}&skipCount=${skipCount + maxItems}&maxItems=${maxItems}">Next →</a></td>
|
||||||
|
<#else>
|
||||||
|
<td><a class="pag-disabled" href="#">Next →</td>
|
||||||
|
</#if>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<table class="details">
|
||||||
|
<#list rows as row>
|
||||||
|
<#assign properties = row.properties>
|
||||||
|
<#if row_index == 0>
|
||||||
|
<tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<th><b>${property.queryName!property.displayName!property.id?html}</b></th>
|
||||||
|
</#list>
|
||||||
|
</tr>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<#list properties as property>
|
||||||
|
<td><@cmisLib.propertyvalue property conn.id>,<br></@cmisLib.propertyvalue></td>
|
||||||
|
</#list>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,19 @@
|
|||||||
|
script:
|
||||||
|
{
|
||||||
|
model.conn = cmis.getConnection(url.templateArgs["conn"]);
|
||||||
|
|
||||||
|
model.defaultStatement = "select cmis:objectId, cmis:name, cmis:objectTypeId\nfrom cmis:document";
|
||||||
|
model.formattedStatement = args.statement;
|
||||||
|
model.skipCount = (args.skipCount == null || args.skipCount < 0) ? 0 : parseInt(args.skipCount);
|
||||||
|
model.maxItems = (args.maxItems == null) ? 10 : parseInt(args.maxItems);
|
||||||
|
|
||||||
|
// execute query
|
||||||
|
if (model.formattedStatement != null)
|
||||||
|
{
|
||||||
|
var statement = model.formattedStatement.replace(/\n/g, " ").replace(/\r/g, "");
|
||||||
|
var iterable = model.conn.session.query(statement, false).skipTo(model.skipCount).getPage(model.maxItems);
|
||||||
|
model.rows = iterable.iterator();
|
||||||
|
model.hasMoreItems = iterable.hasMoreItems;
|
||||||
|
model.pageNumItems = iterable.pageNumItems;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Content Stream</shortname>
|
||||||
|
<url>/cmis-browser-app/rendition/{streamId}?id={objectId}</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/rendition/{streamId}?id={objectId}</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,6 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Repository Info</shortname>
|
||||||
|
<url>/cmis-browser-app/repo</url>
|
||||||
|
<url>/cmis-browser-app/c/{conn}/repo</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,27 @@
|
|||||||
|
<#import "cmis.lib.html.ftl" as cmisLib/>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<@cmisLib.head>Repository: ${repoinfo.name}</@cmisLib.head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<@cmisLib.connectionNavigation conn>Information</@cmisLib.connectionNavigation>
|
||||||
|
|
||||||
|
<div id="content">
|
||||||
|
<table>
|
||||||
|
<tr><td class="headercol">Name:</td><td>${repoinfo.name}</td></tr>
|
||||||
|
<tr><td class="headercol">Id:</td><td>${repoinfo.id}<td></tr>
|
||||||
|
<tr><td class="headercol">Product Name:</td><td>${repoinfo.productName}<td></tr>
|
||||||
|
<tr><td class="headercol">Product Version:</td><td>${repoinfo.productVersion}<td></tr>
|
||||||
|
<tr><td class="headercol">Vendor:</td><td>${repoinfo.vendorName}<td></tr>
|
||||||
|
<tr><td class="headercol">CMIS Version:</td><td>${repoinfo.cmisVersionSupported}<td></tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>You may <a href="<@cmisLib.cmisContextUrl conn.id/>/folder?id=${rootFolder.id?url}">browse the ${rootFolder.name?html} folder</a>
|
||||||
|
or <a href="<@cmisLib.cmisContextUrl conn.id/>/query">query</a> the repository.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,10 @@
|
|||||||
|
var connectionId = url.templateArgs["conn"];
|
||||||
|
|
||||||
|
if (connectionId) {
|
||||||
|
model.conn = cmis.getConnection(connectionId);
|
||||||
|
} else {
|
||||||
|
model.conn = cmis.getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
model.repoinfo = model.conn.session.repositoryInfo;
|
||||||
|
model.rootFolder = model.conn.session.rootFolder;
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Content Stream</shortname>
|
||||||
|
<url>/cmis/content</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Create Folder Example</shortname>
|
||||||
|
<url>/cmissamples/createfolder</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,40 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Create Folder</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>New Folder</h1>
|
||||||
|
<#if folder??>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td>Name:</td><td>${folder.name}</td></tr>
|
||||||
|
<tr><td>Path:</td><td>${folder.path}</td></tr>
|
||||||
|
<tr><td>Id:</td><td>${folder.id}</td></tr>
|
||||||
|
<tr><td>Type:</td><td>${folder.type.id}</td></tr>
|
||||||
|
<tr><td>Created by:</td><td>${folder.createdBy}</td></tr>
|
||||||
|
<tr><td>Creation date:</td><td>${folder.creationDate.time?datetime}</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<#else>
|
||||||
|
|
||||||
|
<form action="${url.service}" method="get" charset="utf-8">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Name:</td>
|
||||||
|
<td><input type="text" name="name" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Path:</td>
|
||||||
|
<td><input type="text" name="path" value="/" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><input type="submit" name="submit" value="Create Folder"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</#if>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,27 @@
|
|||||||
|
// get the sample user connection
|
||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmisSession = cmisConnection.getSession()
|
||||||
|
|
||||||
|
// get arguments
|
||||||
|
var path = args["path"]
|
||||||
|
var name = args["name"]
|
||||||
|
|
||||||
|
if (path != null && name != null)
|
||||||
|
{
|
||||||
|
// get path folder
|
||||||
|
var parentFolder = cmisSession.getObjectByPath(path)
|
||||||
|
|
||||||
|
// set up properties
|
||||||
|
var properties = cmis.createMap()
|
||||||
|
properties["cmis:name"] = name
|
||||||
|
properties["cmis:objectTypeId"] = "cmis:folder"
|
||||||
|
|
||||||
|
// create folder
|
||||||
|
model.folder = parentFolder.createFolder(properties)
|
||||||
|
}
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Current Connection</shortname>
|
||||||
|
<url>/cmissamples/current</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,55 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Connection</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Connection</h1>
|
||||||
|
<table>
|
||||||
|
<tr><td>Is default connection:</td><td>${connection.default?string}</td></tr>
|
||||||
|
<tr><td>Is shared connection:</td><td>${connection.shared?string}</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h1>Repository Info</h1>
|
||||||
|
<table>
|
||||||
|
<tr><td>Id:</td><td>${cmisSession.repositoryInfo.id?html}</td></tr>
|
||||||
|
<tr><td>Name:</td><td>${cmisSession.repositoryInfo.name?html}</td></tr>
|
||||||
|
<tr><td>Description:</td><td>${cmisSession.repositoryInfo.description?html}</td></tr>
|
||||||
|
<tr><td>Vendor:</td><td>${cmisSession.repositoryInfo.vendorName?html}</td></tr>
|
||||||
|
<tr><td>Product name:</td><td>${cmisSession.repositoryInfo.productName?html}</td></tr>
|
||||||
|
<tr><td>Product version:</td><td>${cmisSession.repositoryInfo.productVersion?html}</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h1>Root folder</h1>
|
||||||
|
<span>Root folder Id: ${cmisSession.rootFolder.id?html}</span><br/><br/>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name</td>
|
||||||
|
<th>Id</td>
|
||||||
|
<th>Type</td>
|
||||||
|
</tr>
|
||||||
|
<#list rootFolderChildren as obj>
|
||||||
|
<tr>
|
||||||
|
<td>${obj.name?html}</td>
|
||||||
|
<td>${obj.id?html}</td>
|
||||||
|
<td>${obj.type.id?html}</td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h1>Base Types</h1>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name</td>
|
||||||
|
<th>Id</td>
|
||||||
|
</tr>
|
||||||
|
<#list baseTypes as bt>
|
||||||
|
<tr>
|
||||||
|
<td>${bt.displayName?html}</td>
|
||||||
|
<td>${bt.id?html}</td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,15 @@
|
|||||||
|
// get the sample user connection
|
||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
// get CMIS session
|
||||||
|
var cmisSession = cmisConnection.getSession();
|
||||||
|
|
||||||
|
model.connection = cmisConnection;
|
||||||
|
model.cmisSession = cmisSession;
|
||||||
|
model.rootFolderChildren = cmisSession.getRootFolder().getChildren().iterator();
|
||||||
|
model.baseTypes = cmisSession.getTypeChildren(null, false).iterator();
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Browser</shortname>
|
||||||
|
<url>/cmissamples/browser</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,51 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>${folder.name} - CMIS Browser</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="titlebar">
|
||||||
|
<#if !folder.rootFolder><a href="${url.serviceContext}${url.match}?id=${folder.parentId?url}">UP</a> | </#if><a href="${url.serviceContext}${url.match}"></a>${folder.path?html!""}</td>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table border="0">
|
||||||
|
<#list children as child>
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<#if child.baseType.id == "cmis:folder">
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<a href="${url.serviceContext}${url.match}?id=${child.id?url}"><img src="${url.context}/images/icons/folder_large.png"></a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="title"><a href="${url.serviceContext}${url.match}?id=${child.id?url}">${child.name?html}</a></span><br/>
|
||||||
|
<span>modified ${child.lastModificationDate.time?datetime} by ${child.lastModifiedBy?html}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<#else>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<#assign contentUrl = "${url.serviceContext}/cmis/content?id=${child.id?url}&conn=${connection.id?url}">
|
||||||
|
<a target="_new" href="${contentUrl}">
|
||||||
|
<#if child.renditions?? && (child.renditions?size > 0)>
|
||||||
|
<#assign streamid = child.renditions?first.streamId>
|
||||||
|
</#if>
|
||||||
|
<#if streamid??>
|
||||||
|
<img src="${contentUrl}&stream=${streamid?url}">
|
||||||
|
<#else>
|
||||||
|
<img src="${url.context}/images/icons/file_large.gif">
|
||||||
|
</#if>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span class="title"><a target="_new" href="${contentUrl}">${child.name?html}</a> (${child.versionLabel!""})</span><br/>
|
||||||
|
<span class>modified ${child.lastModificationDate.time?datetime} by ${child.lastModifiedBy?html}<#if (child.contentStreamLength > -1)> / ${(child.contentStreamLength/1000)?int} KB</#if></span>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,29 @@
|
|||||||
|
// get the sample user connection
|
||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
// get CMIS session
|
||||||
|
var cmisSession = cmisConnection.getSession();
|
||||||
|
|
||||||
|
model.cmisSession = cmisSession;
|
||||||
|
model.baseTypes = cmisSession.getTypeChildren(null, false).iterator();
|
||||||
|
|
||||||
|
|
||||||
|
if (args.id == null)
|
||||||
|
{
|
||||||
|
model.folder = cmisSession.getRootFolder();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
model.folder = cmisSession.getObject(args.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
model.connection = cmisConnection;
|
||||||
|
|
||||||
|
var operationContext = cmisSession.createOperationContext();
|
||||||
|
operationContext.setRenditionFilterString("cmis:thumbnail");
|
||||||
|
model.children = model.folder.getChildren(operationContext).iterator();
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Document Download</shortname>
|
||||||
|
<url>/cmissamples/download</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,42 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Document Download</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Document</h1>
|
||||||
|
|
||||||
|
<#if doc??>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td>Name:</td><td>${doc.name?html}</td></tr>
|
||||||
|
<tr><td>Id:</td><td>${doc.id?html}</td></tr>
|
||||||
|
<tr><td>Type:</td><td>${doc.type.displayName?html} (${doc.type.id?html})</td></tr>
|
||||||
|
<tr><td>Created by:</td><td>${doc.createdBy?html}</td></tr>
|
||||||
|
<tr><td>Creation date:</td><td>${doc.creationDate.time?datetime}</td></tr>
|
||||||
|
<tr><td>Last modified by:</td><td>${doc.lastModifiedBy?html}</td></tr>
|
||||||
|
<tr><td>Last modification date:</td><td>${doc.lastModificationDate.time?datetime}</td></tr>
|
||||||
|
<tr><td>Size:</td><td>${doc.contentStreamLength?c} bytes</td></tr>
|
||||||
|
<tr><td>MIME type:</td><td>${doc.contentStreamMimeType?html}</td></tr>
|
||||||
|
<tr><td>Version label:</td><td>${doc.versionLabel!""?html}</td></tr>
|
||||||
|
<tr><td></td><td><a href="${url.serviceContext}/cmis/content?id=${doc.id?url}&conn=${connection.id?url}">download</a></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<#else>
|
||||||
|
|
||||||
|
<form action="${url.service}" method="get" charset="utf-8">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Path:</td>
|
||||||
|
<td><input type="text" name="path" value="/" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><input type="submit" name="submit" value="Get document"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</#if>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,25 @@
|
|||||||
|
// get the sample user connection
|
||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
model.connection = cmisConnection;
|
||||||
|
var cmisSession = cmisConnection.getSession()
|
||||||
|
|
||||||
|
// get arguments
|
||||||
|
var path = args["path"]
|
||||||
|
|
||||||
|
if (path != null) {
|
||||||
|
// if the path is set, get the document
|
||||||
|
var doc = cmisSession.getObjectByPath(path)
|
||||||
|
if (!cmis.isDocument(doc)) {
|
||||||
|
status.code = 404;
|
||||||
|
status.message = "Object is not a document!";
|
||||||
|
status.redirect = true;
|
||||||
|
} else {
|
||||||
|
model.doc = doc
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +0,0 @@
|
|||||||
<webscript>
|
|
||||||
<shortname>Local test</shortname>
|
|
||||||
<url>/cmissample/local</url>
|
|
||||||
<authentication>user</authentication>
|
|
||||||
</webscript>
|
|
@@ -1,49 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>CMIS Connection</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Repository Info</h1>
|
|
||||||
<table>
|
|
||||||
<tr><td>Id:</td><td>${cmisSession.repositoryInfo.id}</td></tr>
|
|
||||||
<tr><td>Name:</td><td>${cmisSession.repositoryInfo.name}</td></tr>
|
|
||||||
<tr><td>Description:</td><td>${cmisSession.repositoryInfo.description}</td></tr>
|
|
||||||
<tr><td>Vendor:</td><td>${cmisSession.repositoryInfo.vendorName}</td></tr>
|
|
||||||
<tr><td>Product name:</td><td>${cmisSession.repositoryInfo.productName}</td></tr>
|
|
||||||
<tr><td>Product version:</td><td>${cmisSession.repositoryInfo.productVersion}</td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h1>Root folder</h1>
|
|
||||||
Root folder Id: ${cmisSession.rootFolder.id}<br/><br/>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>Name</td>
|
|
||||||
<th>Id</td>
|
|
||||||
<th>Type</td>
|
|
||||||
</tr>
|
|
||||||
<#list rootFolderChildren as obj>
|
|
||||||
<tr>
|
|
||||||
<td>${obj.name}</td>
|
|
||||||
<td>${obj.id}</td>
|
|
||||||
<td>${obj.type.id}</td>
|
|
||||||
</tr>
|
|
||||||
</#list>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<h1>Base Types</h1>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>Name</td>
|
|
||||||
<th>Id</td>
|
|
||||||
</tr>
|
|
||||||
<#list baseTypes as bt>
|
|
||||||
<tr>
|
|
||||||
<td>${bt.displayName}</td>
|
|
||||||
<td>${bt.id}</td>
|
|
||||||
</tr>
|
|
||||||
</#list>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,9 +0,0 @@
|
|||||||
// get the local or default remote connection
|
|
||||||
var cmisConnection = cmisclient.getConnection();
|
|
||||||
|
|
||||||
// get CMIS session
|
|
||||||
var cmisSession = cmisConnection.getSession();
|
|
||||||
|
|
||||||
model.cmisSession = cmisSession;
|
|
||||||
model.rootFolderChildren = cmisSession.getRootFolder().getChildren().iterator();
|
|
||||||
model.baseTypes = cmisSession.getTypeChildren(null, false).iterator();
|
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Client Samples</shortname>
|
||||||
|
<url>/cmissamples</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,83 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Client Samples</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>CMIS Client Samples</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="${url.service}/current">Current CMIS connection</a></li>
|
||||||
|
<li><a href="${url.service}/servers">Preconfigured servers</a></li>
|
||||||
|
<li><a href="${url.service}/browser">Simple CMIS browser</a></li>
|
||||||
|
<li><a href="${url.service}/createfolder">Create folder example</a></li>
|
||||||
|
<li><a href="${url.service}/download">Download document example</a></li>
|
||||||
|
<li><a href="${url.service}/upload">Upload document example</a></li>
|
||||||
|
</ul>
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
<div class="titlebar">Current CMIS Connection</div>
|
||||||
|
<table>
|
||||||
|
<tr><td>Id:</td><td>${cmisSession.repositoryInfo.id?html}</td></tr>
|
||||||
|
<tr><td>Name:</td><td>${cmisSession.repositoryInfo.name?html}</td></tr>
|
||||||
|
<tr><td>Description:</td><td>${cmisSession.repositoryInfo.description?html}</td></tr>
|
||||||
|
<tr><td>Vendor:</td><td>${cmisSession.repositoryInfo.vendorName?html}</td></tr>
|
||||||
|
<tr><td>Product name:</td><td>${cmisSession.repositoryInfo.productName?html}</td></tr>
|
||||||
|
<tr><td>Product version:</td><td>${cmisSession.repositoryInfo.productVersion?html}</td></tr>
|
||||||
|
</table>
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
<div class="titlebar">Select CMIS Connection</div>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td style="vertical-align:text-top;">Local Alfresco server:</td>
|
||||||
|
<td>
|
||||||
|
<form action="${url.service}" method="post">
|
||||||
|
<input type="hidden" name="type" value="local"/>
|
||||||
|
<input type="submit" value="Connect"/>
|
||||||
|
</form>
|
||||||
|
<br/><br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="vertical-align:text-top;">Custom OpenCMIS configuration:</td>
|
||||||
|
<td>
|
||||||
|
<form action="${url.service}" method="post">
|
||||||
|
<textarea name="config" cols="100" rows="10">
|
||||||
|
org.apache.chemistry.opencmis.binding.spi.type=atompub
|
||||||
|
org.apache.chemistry.opencmis.binding.atompub.url=http://cmis.alfresco.com/service/cmis
|
||||||
|
org.apache.chemistry.opencmis.user=admin
|
||||||
|
org.apache.chemistry.opencmis.password=admin
|
||||||
|
</textarea>
|
||||||
|
<br/>
|
||||||
|
<input type="hidden" name="type" value="config"/>
|
||||||
|
<input type="submit" value="Connect"/>
|
||||||
|
</form>
|
||||||
|
<br/><br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="vertical-align:text-top;">Preconfigured CMIS server:</td>
|
||||||
|
<td>
|
||||||
|
<form action="${url.service}" method="post">
|
||||||
|
<select name="server" size="5">
|
||||||
|
<#list cmisServers as s>
|
||||||
|
<option value="${s.name}">${s.name} (${s.description})</option>
|
||||||
|
</#list>
|
||||||
|
</select>
|
||||||
|
<br/>
|
||||||
|
<table>
|
||||||
|
<tr><td>Username:</td><td><input type="text" name="username" size="30"/></td></tr>
|
||||||
|
<tr><td>Password:</td><td><input type="password" name="password" size="30"/></td></tr>
|
||||||
|
<tr><td>Repository Id:</td><td><input type="text" name="repositoryid" size="30"/> (leave empty for the first repository)</td></tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
<input type="hidden" name="type" value="server"/>
|
||||||
|
<input type="submit" value="Connect"/>
|
||||||
|
</form>
|
||||||
|
<br/><br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,13 @@
|
|||||||
|
// get the local or default remote connection
|
||||||
|
var cmisConnection = null
|
||||||
|
|
||||||
|
// get the sample user connection
|
||||||
|
cmisConnection = cmis.getConnection("cmis-sample-connection")
|
||||||
|
if(cmisConnection == null)
|
||||||
|
{
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
model.cmisSession = cmisConnection.getSession()
|
||||||
|
model.cmisServers = cmis.getServerDefinitions()
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Client Samples</shortname>
|
||||||
|
<url>/cmissamples</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,61 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Connection</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="${url.context}/css/base.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Connection</h1>
|
||||||
|
|
||||||
|
<#if error??>
|
||||||
|
<h3 style="color:red">Error: ${error}</h3>
|
||||||
|
<#else>
|
||||||
|
<h3>Established!</h3>
|
||||||
|
</#if>
|
||||||
|
|
||||||
|
<div><a href="${url.service}">back</a></div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<h2>Repository Info</h2>
|
||||||
|
<table>
|
||||||
|
<tr><td>Id:</td><td>${cmisSession.repositoryInfo.id?html}</td></tr>
|
||||||
|
<tr><td>Name:</td><td>${cmisSession.repositoryInfo.name?html}</td></tr>
|
||||||
|
<tr><td>Description:</td><td>${cmisSession.repositoryInfo.description?html}</td></tr>
|
||||||
|
<tr><td>Vendor:</td><td>${cmisSession.repositoryInfo.vendorName?html}</td></tr>
|
||||||
|
<tr><td>Product name:</td><td>${cmisSession.repositoryInfo.productName?html}</td></tr>
|
||||||
|
<tr><td>Product version:</td><td>${cmisSession.repositoryInfo.productVersion?html}</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Root folder</h2>
|
||||||
|
<div>Root folder Id: ${cmisSession.rootFolder.id?html}</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name</td>
|
||||||
|
<th>Id</td>
|
||||||
|
<th>Type</td>
|
||||||
|
</tr>
|
||||||
|
<#list rootFolderChildren as obj>
|
||||||
|
<tr>
|
||||||
|
<td>${obj.name?html}</td>
|
||||||
|
<td>${obj.id?html}</td>
|
||||||
|
<td>${obj.type.id?html}</td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Base Types</h2>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name</td>
|
||||||
|
<th>Id</td>
|
||||||
|
</tr>
|
||||||
|
<#list baseTypes as bt>
|
||||||
|
<tr>
|
||||||
|
<td>${bt.displayName?html}</td>
|
||||||
|
<td>${bt.id?html}</td>
|
||||||
|
</tr>
|
||||||
|
</#list>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,93 @@
|
|||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
|
||||||
|
// get the current user connection, returns null if it is the default connection
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
|
||||||
|
var error = null
|
||||||
|
var type = args["type"]
|
||||||
|
|
||||||
|
if (type == null) {
|
||||||
|
error = "Connection type not set!"
|
||||||
|
} else if (type == "local") {
|
||||||
|
// local Alfresco server
|
||||||
|
|
||||||
|
// close current connection and get the local connection
|
||||||
|
if (cmisConnection != null) {
|
||||||
|
cmisConnection.close()
|
||||||
|
}
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
|
||||||
|
} else if (type == "config") {
|
||||||
|
// OpenCMIS configuration
|
||||||
|
|
||||||
|
var config = args["config"]
|
||||||
|
if (config == null) {
|
||||||
|
error = "No configuration!"
|
||||||
|
} else {
|
||||||
|
var parameters = cmis.createMap()
|
||||||
|
var lines = config.split("\r\n")
|
||||||
|
|
||||||
|
// parse the configuration
|
||||||
|
for (idx in lines) {
|
||||||
|
var line = lines[idx]
|
||||||
|
var x = line.indexOf("=")
|
||||||
|
if (x > 0) {
|
||||||
|
parameters[line.substring(0, x)] = line.substring(x + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set up a server definition
|
||||||
|
var serverDefinition = cmis.createServerDefinition("customserver", parameters)
|
||||||
|
|
||||||
|
// close current connection and open a new one
|
||||||
|
if (cmisConnection != null) {
|
||||||
|
cmisConnection.close()
|
||||||
|
}
|
||||||
|
cmisConnection = cmis.createUserConnection(serverDefinition, connectionId)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (type == "server") {
|
||||||
|
// preconfigured server
|
||||||
|
|
||||||
|
var server = args["server"]
|
||||||
|
if (server == null) {
|
||||||
|
error = "No server provided!"
|
||||||
|
} else {
|
||||||
|
// find the server definition
|
||||||
|
var serverDefinition = cmis.getServerDefinition(server)
|
||||||
|
if (serverDefinition == null) {
|
||||||
|
error = "Server definition not found!"
|
||||||
|
} else {
|
||||||
|
// if username and password are set, create a new server definition
|
||||||
|
if (args["username"] != null && args["username"].length > 0) {
|
||||||
|
if (args["repositoryid"] != null && args["repositoryid"].length > 0) {
|
||||||
|
serverDefinition = cmis.createServerDefinition(serverDefinition, args["username"], args["password"], args["repositoryid"])
|
||||||
|
} else {
|
||||||
|
serverDefinition = cmis.createServerDefinition(serverDefinition, args["username"], args["password"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// close current connection and open a new one
|
||||||
|
if (cmisConnection != null) {
|
||||||
|
cmisConnection.close()
|
||||||
|
}
|
||||||
|
cmisConnection = cmis.createUserConnection(serverDefinition, connectionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
error = "Unknown type!"
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle errors
|
||||||
|
if (error != null) {
|
||||||
|
model.error = error
|
||||||
|
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model.cmisSession = cmisConnection.getSession()
|
||||||
|
model.rootFolderChildren = model.cmisSession.getRootFolder().getChildren().iterator();
|
||||||
|
model.baseTypes = model.cmisSession.getTypeChildren(null, false).iterator();
|
@@ -1,4 +1,4 @@
|
|||||||
<webscript>
|
<webscript>
|
||||||
<shortname>CMIS servers</shortname>
|
<shortname>CMIS Servers</shortname>
|
||||||
<url>/cmissample/servers</url>
|
<url>/cmissamples/servers</url>
|
||||||
</webscript>
|
</webscript>
|
@@ -14,12 +14,12 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<#list cmisServers as s>
|
<#list cmisServers as s>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${s.name}</td>
|
<td>${s.name?html}</td>
|
||||||
<td>${s.description}</td>
|
<td>${s.description?html}</td>
|
||||||
<td>
|
<td>
|
||||||
<#assign p = s.parameters>
|
<#assign p = s.parameters>
|
||||||
<#list p?keys as key>
|
<#list p?keys as key>
|
||||||
<code>${key} = ${p[key]}</code><br/>
|
<code>${key?html} = ${p[key]?html}</code><br/>
|
||||||
</#list>
|
</#list>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
// get all configured CMIS servers
|
// get all configured CMIS servers
|
||||||
model.cmisServers = cmisclient.getServerDefinitions();
|
model.cmisServers = cmis.getServerDefinitions();
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Document Upload Form</shortname>
|
||||||
|
<url>/cmissamples/upload</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CMIS Upload Web Script Sample</title>
|
||||||
|
<link rel="stylesheet" href="${url.context}/css/base.css" TYPE="text/css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Upload</h1>
|
||||||
|
<form action="${url.service}" method="post" enctype="multipart/form-data" charset="utf-8">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>File:</td>
|
||||||
|
<td><input type="file" name="file" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Name:</td>
|
||||||
|
<td><input type="text" name="name" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Path:</td>
|
||||||
|
<td><input type="text" name="path" value="/" size="100"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><input type="submit" name="submit" value="Upload"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,5 @@
|
|||||||
|
<webscript>
|
||||||
|
<shortname>CMIS Document Upload</shortname>
|
||||||
|
<url>/cmissamples/upload</url>
|
||||||
|
<authentication>user</authentication>
|
||||||
|
</webscript>
|
@@ -0,0 +1,18 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Upload Web Script Sample</title>
|
||||||
|
<link rel="stylesheet" href="${url.context}/css/base.css" TYPE="text/css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>New Document</h1>
|
||||||
|
<table>
|
||||||
|
<tr><td>Name:</td><td>${doc.name?html}</td></tr>
|
||||||
|
<tr><td>Id:</td><td>${doc.id?html}</td></tr>
|
||||||
|
<tr><td>Type:</td><td>${doc.type.id?html}</td></tr>
|
||||||
|
<tr><td>Created by:</td><td>${doc.createdBy?html}</td></tr>
|
||||||
|
<tr><td>Creation date:</td><td>${doc.creationDate.time?datetime}</td></tr>
|
||||||
|
<tr><td>Size:</td><td>${(doc.contentStreamLength/1024)?int} KB</td></tr>
|
||||||
|
<tr><td>MIME type:</td><td>${doc.contentStreamMimeType?html}</td></tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,46 @@
|
|||||||
|
//get the sample user connection
|
||||||
|
var connectionId = "cmis-sample-connection"
|
||||||
|
var cmisConnection = cmis.getConnection(connectionId)
|
||||||
|
if (cmisConnection == null) {
|
||||||
|
// if no connection exists, talk to the local server
|
||||||
|
cmisConnection = cmis.getConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
// get CMIS session
|
||||||
|
var cmisSession = cmisConnection.getSession();
|
||||||
|
model.cmisSession = cmisSession;
|
||||||
|
|
||||||
|
// locate file attributes
|
||||||
|
for each (field in formdata.fields) {
|
||||||
|
if (field.name == "name") {
|
||||||
|
name = field.value;
|
||||||
|
} else if (field.name == "file" && field.isFile) {
|
||||||
|
filename = field.filename;
|
||||||
|
content = field.content;
|
||||||
|
} else if (field.name == "path") {
|
||||||
|
path = field.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ensure mandatory file attributes have been located
|
||||||
|
if (filename == undefined || content == undefined) {
|
||||||
|
status.code = 400;
|
||||||
|
status.message = "Uploaded file cannot be located in request";
|
||||||
|
status.redirect = true;
|
||||||
|
} else {
|
||||||
|
var folder = cmisSession.getObjectByPath(path);
|
||||||
|
|
||||||
|
if (folder != undefined && folder.baseType.id == "cmis:folder") {
|
||||||
|
var properties = cmis.createMap()
|
||||||
|
properties["cmis:name"] = String(name);
|
||||||
|
properties["cmis:objectTypeId"] = "cmis:document";
|
||||||
|
|
||||||
|
var contentStream = cmis.createContentStream(filename, content);
|
||||||
|
|
||||||
|
model.doc = folder.createDocument(properties, contentStream, null);
|
||||||
|
} else {
|
||||||
|
status.code = 400;
|
||||||
|
status.message = "Error: Upload folder does not exist";
|
||||||
|
status.redirect = true;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,19 +1,19 @@
|
|||||||
model.cmisVersion = cmis.version;
|
model.cmisVersion = cmisserver.version;
|
||||||
model.cmisSpecTitle = cmis.specTitle;
|
model.cmisSpecTitle = cmisserver.specTitle;
|
||||||
model.defaultRootFolder = cmis.defaultRootFolder;
|
model.defaultRootFolder = cmisserver.defaultRootFolder;
|
||||||
model.defaultRootFolderPath = cmis.defaultRootFolderPath;
|
model.defaultRootFolderPath = cmisserver.defaultRootFolderPath;
|
||||||
model.querySupport = cmis.querySupport.label;
|
model.querySupport = cmisserver.querySupport.label;
|
||||||
model.joinSupport = cmis.joinSupport.label;
|
model.joinSupport = cmisserver.joinSupport.label;
|
||||||
model.pwcSearchable = cmis.pwcSearchable;
|
model.pwcSearchable = cmisserver.pwcSearchable;
|
||||||
model.allVersionsSearchable = cmis.allVersionsSearchable;
|
model.allVersionsSearchable = cmisserver.allVersionsSearchable;
|
||||||
model.aclCapability = cmis.aclCapability.label;
|
model.aclCapability = cmisserver.aclCapability.label;
|
||||||
model.aclSupportedPermissions = cmis.aclSupportedPermissions.label;
|
model.aclSupportedPermissions = cmisserver.aclSupportedPermissions.label;
|
||||||
model.aclPropagation = cmis.aclPropagation.label;
|
model.aclPropagation = cmisserver.aclPropagation.label;
|
||||||
model.repositoryPermissions = cmis.repositoryPermissions;
|
model.repositoryPermissions = cmisserver.repositoryPermissions;
|
||||||
model.permissionMappings = cmis.permissionMappings;
|
model.permissionMappings = cmisserver.permissionMappings;
|
||||||
model.principalAnonymous = cmis.principalAnonymous;
|
model.principalAnonymous = cmisserver.principalAnonymous;
|
||||||
model.principalAnyone = cmis.principalAnyone;
|
model.principalAnyone = cmisserver.principalAnyone;
|
||||||
model.changeLogCapability = cmis.changeLogCapability.label;
|
model.changeLogCapability = cmisserver.changeLogCapability.label;
|
||||||
model.lastChangeLogToken = cmis.lastChangeLogToken;
|
model.lastChangeLogToken = cmisserver.lastChangeLogToken;
|
||||||
model.changesOnType = cmis.changesOnType;
|
model.changesOnType = cmisserver.changesOnType;
|
||||||
model.changesIncomplete = cmis.changesIncomplete;
|
model.changesIncomplete = cmisserver.changesIncomplete;
|
||||||
|
@@ -10,7 +10,7 @@ script:
|
|||||||
}
|
}
|
||||||
var node = object.node;
|
var node = object.node;
|
||||||
|
|
||||||
cmis.deleteContentStream(node);
|
cmisserver.deleteContentStream(node);
|
||||||
|
|
||||||
status.code = 204; // Success, but no response content
|
status.code = 204; // Success, but no response content
|
||||||
status.redirect = true;
|
status.redirect = true;
|
||||||
|
@@ -10,8 +10,8 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// handle filters
|
// handle filters
|
||||||
model.types = args[cmis.ARG_TYPES] === null ? cmis.defaultTypesFilter : args[ARG_TYPES];
|
model.types = args[cmisserver.ARG_TYPES] === null ? cmisserver.defaultTypesFilter : args[ARG_TYPES];
|
||||||
if (!cmis.isValidTypesFilter(model.types))
|
if (!cmisserver.isValidTypesFilter(model.types))
|
||||||
{
|
{
|
||||||
status.code = 400;
|
status.code = 400;
|
||||||
status.message = "Types filter '" + model.types + "' unknown";
|
status.message = "Types filter '" + model.types + "' unknown";
|
||||||
@@ -20,29 +20,29 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// depth
|
// depth
|
||||||
var depth = args[cmis.ARG_DEPTH];
|
var depth = args[cmisserver.ARG_DEPTH];
|
||||||
model.depth = (depth === null) ? 1 : parseInt(depth);
|
model.depth = (depth === null) ? 1 : parseInt(depth);
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
var tckRunner = Packages.org.apache.chemistry.tck.atompub.tools.TCKRunner();
|
var tckRunner = Packages.org.apache.chemistry.tck.atompub.tools.TCKRunner();
|
||||||
model.tckTests = tckRunner.getTestNames();
|
model.tckTests = tckRunner.getTestNames();
|
||||||
model.tckOptions = tckRunner.getOptions();
|
model.tckOptions = tckRunner.getOptions();
|
||||||
model.cmisVersion = cmis.version;
|
model.cmisVersion = cmisserver.version;
|
||||||
model.cmisSpecTitle = cmis.specTitle;
|
model.cmisSpecTitle = cmisserver.specTitle;
|
||||||
model.querySupport = cmis.querySupport.label;
|
model.querySupport = cmisserver.querySupport.label;
|
||||||
model.joinSupport = cmis.joinSupport.label;
|
model.joinSupport = cmisserver.joinSupport.label;
|
||||||
model.pwcSearchable = cmis.pwcSearchable;
|
model.pwcSearchable = cmisserver.pwcSearchable;
|
||||||
model.allVersionsSearchable = cmis.allVersionsSearchable;
|
model.allVersionsSearchable = cmisserver.allVersionsSearchable;
|
||||||
model.aclCapability = cmis.aclCapability.label;
|
model.aclCapability = cmisserver.aclCapability.label;
|
||||||
model.aclSupportedPermissions = cmis.aclSupportedPermissions.label;
|
model.aclSupportedPermissions = cmisserver.aclSupportedPermissions.label;
|
||||||
model.aclPropagation = cmis.aclPropagation.label;
|
model.aclPropagation = cmisserver.aclPropagation.label;
|
||||||
|
@@ -11,7 +11,7 @@ script:
|
|||||||
var node = object.node;
|
var node = object.node;
|
||||||
|
|
||||||
// Intentionally pass false as allVersions flag for now. There is no binding.
|
// Intentionally pass false as allVersions flag for now. There is no binding.
|
||||||
cmis.deleteObject(node, false);
|
cmisserver.deleteObject(node, false);
|
||||||
|
|
||||||
status.code = 204; // Success, but no response content
|
status.code = 204; // Success, but no response content
|
||||||
status.redirect = true;
|
status.redirect = true;
|
||||||
|
@@ -10,35 +10,35 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// return version
|
// return version
|
||||||
var returnVersion = args[cmis.ARG_RETURN_VERSION];
|
var returnVersion = args[cmisserver.ARG_RETURN_VERSION];
|
||||||
if (returnVersion === null || returnVersion.length == 0)
|
if (returnVersion === null || returnVersion.length == 0)
|
||||||
{
|
{
|
||||||
returnVersion = "this";
|
returnVersion = "this";
|
||||||
}
|
}
|
||||||
model.node = cmis.getReturnVersion(model.node, returnVersion);
|
model.node = cmisserver.getReturnVersion(model.node, returnVersion);
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null || model.filter == "")
|
if (model.filter === null || model.filter == "")
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// ACL
|
// ACL
|
||||||
model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true";
|
model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true";
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
model.includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true";
|
model.includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true";
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
|
@@ -13,7 +13,7 @@ function createNode(parent, entry, slug, versioningState)
|
|||||||
|
|
||||||
// locate type definition
|
// locate type definition
|
||||||
// TODO: check this against spec - default to Document, if not specified
|
// TODO: check this against spec - default to Document, if not specified
|
||||||
var type = cmis.queryType(typeId === null ? DOCUMENT_TYPE_ID.id : typeId);
|
var type = cmisserver.queryType(typeId === null ? DOCUMENT_TYPE_ID.id : typeId);
|
||||||
if (type === null)
|
if (type === null)
|
||||||
{
|
{
|
||||||
status.code = 400;
|
status.code = 400;
|
||||||
@@ -36,7 +36,7 @@ function createNode(parent, entry, slug, versioningState)
|
|||||||
}
|
}
|
||||||
else if (baseType == POLICY_TYPE_ID)
|
else if (baseType == POLICY_TYPE_ID)
|
||||||
{
|
{
|
||||||
node = cmis.createPolicy(typeId, parent);
|
node = cmisserver.createPolicy(typeId, parent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -58,7 +58,7 @@ function createNode(parent, entry, slug, versioningState)
|
|||||||
// apply versioning state
|
// apply versioning state
|
||||||
if (baseType == DOCUMENT_TYPE_ID && versioningState != null)
|
if (baseType == DOCUMENT_TYPE_ID && versioningState != null)
|
||||||
{
|
{
|
||||||
node = cmis.applyVersioningState(node, versioningState);
|
node = cmisserver.applyVersioningState(node, versioningState);
|
||||||
}
|
}
|
||||||
|
|
||||||
// only return node if updated successfully
|
// only return node if updated successfully
|
||||||
@@ -91,7 +91,7 @@ function updateNode(node, entry, exclude, validator)
|
|||||||
var vals = new Object();
|
var vals = new Object();
|
||||||
var exclude = (exclude == null) ? new Array() : exclude;
|
var exclude = (exclude == null) ? new Array() : exclude;
|
||||||
exclude.push(PROP_BASE_TYPE_ID);
|
exclude.push(PROP_BASE_TYPE_ID);
|
||||||
var typeDef = cmis.queryType(node);
|
var typeDef = cmisserver.queryType(node);
|
||||||
|
|
||||||
// Apply the provided properties of the node type
|
// Apply the provided properties of the node type
|
||||||
unpackProperties(node, typeDef, object == null ? null : object.properties, exclude, validator, vals);
|
unpackProperties(node, typeDef, object == null ? null : object.properties, exclude, validator, vals);
|
||||||
@@ -111,7 +111,7 @@ function updateNode(node, entry, exclude, validator)
|
|||||||
if (extension != null)
|
if (extension != null)
|
||||||
{
|
{
|
||||||
// Add and remove aspects
|
// Add and remove aspects
|
||||||
cmis.setAspects(node, extension.aspectsToRemove, extension.aspectsToAdd);
|
cmisserver.setAspects(node, extension.aspectsToRemove, extension.aspectsToAdd);
|
||||||
|
|
||||||
// Apply the provided properties of the aspects
|
// Apply the provided properties of the aspects
|
||||||
unpackProperties(node, null, extension.properties, exclude, validator, vals);
|
unpackProperties(node, null, extension.properties, exclude, validator, vals);
|
||||||
@@ -213,7 +213,7 @@ function unpackProperties(node, typeDef, props, exclude, validator, vals)
|
|||||||
for each (propName in updateProps)
|
for each (propName in updateProps)
|
||||||
{
|
{
|
||||||
// is this a valid property?
|
// is this a valid property?
|
||||||
var propDef = typeDef == null ? cmis.queryProperty(propName) : typeDef.propertyDefinitions[propName];
|
var propDef = typeDef == null ? cmisserver.queryProperty(propName) : typeDef.propertyDefinitions[propName];
|
||||||
if (propDef == null)
|
if (propDef == null)
|
||||||
{
|
{
|
||||||
status.code = 400;
|
status.code = 400;
|
||||||
@@ -299,7 +299,7 @@ function createAssociation(source, entry)
|
|||||||
|
|
||||||
// locate relationship type definition
|
// locate relationship type definition
|
||||||
// TODO: check this against spec - default to Relationship, if not specified
|
// TODO: check this against spec - default to Relationship, if not specified
|
||||||
var type = cmis.queryType(typeId === null ? RELATIONSHIP_TYPE_ID.id : typeId);
|
var type = cmisserver.queryType(typeId === null ? RELATIONSHIP_TYPE_ID.id : typeId);
|
||||||
if (type === null)
|
if (type === null)
|
||||||
{
|
{
|
||||||
status.setCode(400, "CMIS object type " + typeId + " not understood");
|
status.setCode(400, "CMIS object type " + typeId + " not understood");
|
||||||
@@ -345,7 +345,7 @@ function createAssociation(source, entry)
|
|||||||
function applyPolicy(target, entry)
|
function applyPolicy(target, entry)
|
||||||
{
|
{
|
||||||
var object = entry.getExtension(atom.names.cmisra_object);
|
var object = entry.getExtension(atom.names.cmisra_object);
|
||||||
cmis.applyPolicy(object.objectId, target);
|
cmisserver.applyPolicy(object.objectId, target);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,13 +5,13 @@
|
|||||||
function getObjectFromUrl()
|
function getObjectFromUrl()
|
||||||
{
|
{
|
||||||
var ret = new Object();
|
var ret = new Object();
|
||||||
ret.ref = cmis.createObjectReferenceFromUrl(args, url.templateArgs);
|
ret.ref = cmisserver.createObjectReferenceFromUrl(args, url.templateArgs);
|
||||||
if (ret.ref == null)
|
if (ret.ref == null)
|
||||||
{
|
{
|
||||||
status.setCode(400, "Cannot determine object reference from URL");
|
status.setCode(400, "Cannot determine object reference from URL");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret.node = cmis.getNode(ret.ref);
|
ret.node = cmisserver.getNode(ret.ref);
|
||||||
if (ret.node === null)
|
if (ret.node === null)
|
||||||
{
|
{
|
||||||
status.setCode(404, "Cannot find object for " + ret.ref.toString());
|
status.setCode(404, "Cannot find object for " + ret.ref.toString());
|
||||||
@@ -26,13 +26,13 @@ function getObjectFromUrl()
|
|||||||
function getObjectFromObjectId(objectId)
|
function getObjectFromObjectId(objectId)
|
||||||
{
|
{
|
||||||
var ret = new Object();
|
var ret = new Object();
|
||||||
ret.ref = cmis.createObjectIdReference(objectId);
|
ret.ref = cmisserver.createObjectIdReference(objectId);
|
||||||
if (ret.ref == null)
|
if (ret.ref == null)
|
||||||
{
|
{
|
||||||
status.setCode(400, "Cannot create object id reference from " + objectId);
|
status.setCode(400, "Cannot create object id reference from " + objectId);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret.node = cmis.getNode(ret.ref);
|
ret.node = cmisserver.getNode(ret.ref);
|
||||||
if (ret.node === null)
|
if (ret.node === null)
|
||||||
{
|
{
|
||||||
status.setCode(404, "Cannot find object for " + ret.ref.toString());
|
status.setCode(404, "Cannot find object for " + ret.ref.toString());
|
||||||
@@ -47,13 +47,13 @@ function getObjectFromObjectId(objectId)
|
|||||||
function getAssocFromUrl()
|
function getAssocFromUrl()
|
||||||
{
|
{
|
||||||
var ret = new Object();
|
var ret = new Object();
|
||||||
ret.ref = cmis.createRelationshipReferenceFromUrl(args, url.templateArgs);
|
ret.ref = cmisserver.createRelationshipReferenceFromUrl(args, url.templateArgs);
|
||||||
if (ret.ref == null)
|
if (ret.ref == null)
|
||||||
{
|
{
|
||||||
status.setCode(400, "Cannot determine association reference from URL");
|
status.setCode(400, "Cannot determine association reference from URL");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret.assoc = cmis.getAssociation(ret.ref);
|
ret.assoc = cmisserver.getAssociation(ret.ref);
|
||||||
if (ret.assoc === null)
|
if (ret.assoc === null)
|
||||||
{
|
{
|
||||||
status.setCode(404, "Cannot find association for " + ret.ref.toString());
|
status.setCode(404, "Cannot find association for " + ret.ref.toString());
|
||||||
|
@@ -11,7 +11,7 @@ script:
|
|||||||
var node = object.node;
|
var node = object.node;
|
||||||
|
|
||||||
// locate parent
|
// locate parent
|
||||||
if (node.id == cmis.defaultRootFolder.id)
|
if (node.id == cmisserver.defaultRootFolder.id)
|
||||||
{
|
{
|
||||||
status.code = 404;
|
status.code = 404;
|
||||||
status.message = "Object " + object.ref + " parent not found";
|
status.message = "Object " + object.ref + " parent not found";
|
||||||
@@ -28,18 +28,18 @@ script:
|
|||||||
model.node = node.parent;
|
model.node = node.parent;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
|
@@ -21,20 +21,20 @@ script:
|
|||||||
model.parents = parents;
|
model.parents = parents;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
var filter = args[cmis.ARG_FILTER];
|
var filter = args[cmisserver.ARG_FILTER];
|
||||||
if (filter === null)
|
if (filter === null)
|
||||||
{
|
{
|
||||||
filter = "*";
|
filter = "*";
|
||||||
@@ -20,7 +20,7 @@ script:
|
|||||||
|
|
||||||
// retrieve policies
|
// retrieve policies
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var paged = cmis.getAppliedPolicies(model.node, filter, page);
|
var paged = cmisserver.getAppliedPolicies(model.node, filter, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
}
|
}
|
||||||
|
@@ -9,7 +9,7 @@ script:
|
|||||||
}
|
}
|
||||||
var node = object.node;
|
var node = object.node;
|
||||||
|
|
||||||
cmis.cancelCheckOut(node);
|
cmisserver.cancelCheckOut(node);
|
||||||
|
|
||||||
status.code = 204; // Success, but no response content
|
status.code = 204; // Success, but no response content
|
||||||
status.redirect = true;
|
status.redirect = true;
|
||||||
|
@@ -10,35 +10,35 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// return version
|
// return version
|
||||||
var returnVersion = args[cmis.ARG_RETURN_VERSION];
|
var returnVersion = args[cmisserver.ARG_RETURN_VERSION];
|
||||||
if (returnVersion === null || returnVersion.length == 0)
|
if (returnVersion === null || returnVersion.length == 0)
|
||||||
{
|
{
|
||||||
returnVersion = "this";
|
returnVersion = "this";
|
||||||
}
|
}
|
||||||
model.node = cmis.getReturnVersion(model.node, returnVersion);
|
model.node = cmisserver.getReturnVersion(model.node, returnVersion);
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null || model.filter == "")
|
if (model.filter === null || model.filter == "")
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// ACL
|
// ACL
|
||||||
model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true";
|
model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true";
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
model.includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true";
|
model.includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true";
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
|
@@ -8,7 +8,7 @@ script:
|
|||||||
var object = getObjectFromUrl();
|
var object = getObjectFromUrl();
|
||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
model.checkin = args[cmis.ARG_CHECKIN] == "true" ? true : false;
|
model.checkin = args[cmisserver.ARG_CHECKIN] == "true" ? true : false;
|
||||||
|
|
||||||
if (entry !== null)
|
if (entry !== null)
|
||||||
{
|
{
|
||||||
@@ -27,9 +27,9 @@ script:
|
|||||||
// checkin
|
// checkin
|
||||||
if (model.checkin)
|
if (model.checkin)
|
||||||
{
|
{
|
||||||
var comment = args[cmis.ARG_CHECKIN_COMMENT];
|
var comment = args[cmisserver.ARG_CHECKIN_COMMENT];
|
||||||
var major = args[cmis.ARG_MAJOR];
|
var major = args[cmisserver.ARG_MAJOR];
|
||||||
major = (major === null || major == "true") ? true : false;
|
major = (major === null || major == "true") ? true : false;
|
||||||
model.node = cmis.checkIn(model.node, comment, major);
|
model.node = cmisserver.checkIn(model.node, comment, major);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@ script:
|
|||||||
var object = getObjectFromUrl();
|
var object = getObjectFromUrl();
|
||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
model.checkin = args[cmis.ARG_CHECKIN] == "true" ? true : false;
|
model.checkin = args[cmisserver.ARG_CHECKIN] == "true" ? true : false;
|
||||||
|
|
||||||
if (entry !== null)
|
if (entry !== null)
|
||||||
{
|
{
|
||||||
@@ -27,9 +27,9 @@ script:
|
|||||||
// checkin
|
// checkin
|
||||||
if (model.checkin)
|
if (model.checkin)
|
||||||
{
|
{
|
||||||
var comment = args[cmis.ARG_CHECKIN_COMMENT];
|
var comment = args[cmisserver.ARG_CHECKIN_COMMENT];
|
||||||
var major = args[cmis.ARG_MAJOR];
|
var major = args[cmisserver.ARG_MAJOR];
|
||||||
major = (major === null || major == "true") ? true : false;
|
major = (major === null || major == "true") ? true : false;
|
||||||
model.node = cmis.checkIn(model.node, comment, major);
|
model.node = cmisserver.checkIn(model.node, comment, major);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -64,7 +64,7 @@ script:
|
|||||||
var page = paging.createPageOrWindow(null, null, isNaN(skipCount) ? null : skipCount, isNaN(maxItems) ? null : maxItems);
|
var page = paging.createPageOrWindow(null, null, isNaN(skipCount) ? null : skipCount, isNaN(maxItems) ? null : maxItems);
|
||||||
|
|
||||||
// perform query
|
// perform query
|
||||||
var paged = cmis.query(model.statement, page);
|
var paged = cmisserver.query(model.statement, page);
|
||||||
model.resultset = paged.result;
|
model.resultset = paged.result;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
|
|
||||||
@@ -72,12 +72,12 @@ script:
|
|||||||
|
|
||||||
// construct query uri
|
// construct query uri
|
||||||
model.queryUri = "/cmis/query";
|
model.queryUri = "/cmis/query";
|
||||||
model.queryArgs = cmis.ARG_QUERY_STATEMENT + "=" + model.statement;
|
model.queryArgs = cmisserver.ARG_QUERY_STATEMENT + "=" + model.statement;
|
||||||
if (model.includeAllowableActions) model.queryArgs += "&" + cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=" + model.includeAllowableActions;
|
if (model.includeAllowableActions) model.queryArgs += "&" + cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=" + model.includeAllowableActions;
|
||||||
if (model.includeRelationships != "none") model.queryArgs += "&" + cmis.ARG_INCLUDE_RELATIONSHIPS + "=" + model.includeRelationships;
|
if (model.includeRelationships != "none") model.queryArgs += "&" + cmisserver.ARG_INCLUDE_RELATIONSHIPS + "=" + model.includeRelationships;
|
||||||
if (model.renditionFilter != "cmis:none") model.queryArgs += "&" + cmis.ARG_RENDITION_FILTER + "=" + model.renditionFilter;
|
if (model.renditionFilter != "cmis:none") model.queryArgs += "&" + cmisserver.ARG_RENDITION_FILTER + "=" + model.renditionFilter;
|
||||||
model.queryArgs += "&" + cmis.ARG_SKIP_COUNT + "=" + page.number;
|
model.queryArgs += "&" + cmisserver.ARG_SKIP_COUNT + "=" + page.number;
|
||||||
model.queryArgs += "&" + cmis.ARG_MAX_ITEMS + "=" + page.size;
|
model.queryArgs += "&" + cmisserver.ARG_MAX_ITEMS + "=" + page.size;
|
||||||
|
|
||||||
// TODO: set Content-Location
|
// TODO: set Content-Location
|
||||||
status.code = 201;
|
status.code = 201;
|
||||||
|
@@ -27,11 +27,11 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
@@ -39,7 +39,7 @@ script:
|
|||||||
|
|
||||||
// perform query
|
// perform query
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var paged = cmis.query(model.statement, page);
|
var paged = cmisserver.query(model.statement, page);
|
||||||
model.resultset = paged.result;
|
model.resultset = paged.result;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ script:
|
|||||||
}
|
}
|
||||||
var assoc = rel.assoc;
|
var assoc = rel.assoc;
|
||||||
|
|
||||||
cmis.deleteObject(assoc);
|
cmisserver.deleteObject(assoc);
|
||||||
|
|
||||||
status.code = 204; // Success, but no response content
|
status.code = 204; // Success, but no response content
|
||||||
status.redirect = true;
|
status.redirect = true;
|
||||||
|
@@ -12,13 +12,13 @@ script:
|
|||||||
model.assoc = rel.assoc;
|
model.assoc = rel.assoc;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
}
|
}
|
||||||
|
@@ -12,17 +12,17 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// relationship type
|
// relationship type
|
||||||
var relType = args[cmis.ARG_RELATIONSHIP_TYPE];
|
var relType = args[cmisserver.ARG_RELATIONSHIP_TYPE];
|
||||||
if (relType != null)
|
if (relType != null)
|
||||||
{
|
{
|
||||||
model.relTypeDef = cmis.queryType(relType);
|
model.relTypeDef = cmisserver.queryType(relType);
|
||||||
if (model.relTypeDef === null)
|
if (model.relTypeDef === null)
|
||||||
{
|
{
|
||||||
status.setCode(400, "Relationship type " + relType + " unknown");
|
status.setCode(400, "Relationship type " + relType + " unknown");
|
||||||
@@ -36,10 +36,10 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// include sub relationship types
|
// include sub relationship types
|
||||||
model.includeSubRelationshipTypes = args[cmis.ARG_INCLUDE_SUB_RELATIONSHIP_TYPES] == "true" ? true : false;
|
model.includeSubRelationshipTypes = args[cmisserver.ARG_INCLUDE_SUB_RELATIONSHIP_TYPES] == "true" ? true : false;
|
||||||
|
|
||||||
// direction
|
// direction
|
||||||
var direction = args[cmis.ARG_DIRECTION];
|
var direction = args[cmisserver.ARG_DIRECTION];
|
||||||
if (direction !== null && !CMISRelationshipDirectionEnum.FACTORY.validLabel(direction))
|
if (direction !== null && !CMISRelationshipDirectionEnum.FACTORY.validLabel(direction))
|
||||||
{
|
{
|
||||||
status.setCode(400, "Direction " + direction + " unknown");
|
status.setCode(400, "Direction " + direction + " unknown");
|
||||||
@@ -48,11 +48,11 @@ script:
|
|||||||
model.direction = CMISRelationshipDirectionEnum.FACTORY.toEnum(direction);
|
model.direction = CMISRelationshipDirectionEnum.FACTORY.toEnum(direction);
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
model.includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true" ? true : false;
|
model.includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true" ? true : false;
|
||||||
|
|
||||||
// retrieve relationships
|
// retrieve relationships
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var paged = cmis.queryRelationships(model.node, model.relTypeDef, model.includeSubRelationshipTypes, model.direction, page);
|
var paged = cmisserver.queryRelationships(model.node, model.relTypeDef, model.includeSubRelationshipTypes, model.direction, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,7 @@ script:
|
|||||||
var node = object.node;
|
var node = object.node;
|
||||||
|
|
||||||
// unfileObjects
|
// unfileObjects
|
||||||
var unfileObjects = args[cmis.ARG_UNFILE_OBJECTS];
|
var unfileObjects = args[cmisserver.ARG_UNFILE_OBJECTS];
|
||||||
if (unfileObjects === null || unfileObjects.length == 0)
|
if (unfileObjects === null || unfileObjects.length == 0)
|
||||||
{
|
{
|
||||||
unfileObjects = "delete";
|
unfileObjects = "delete";
|
||||||
@@ -26,8 +26,8 @@ script:
|
|||||||
break script;
|
break script;
|
||||||
}
|
}
|
||||||
|
|
||||||
var continueOnFailure = (args[cmis.ARG_CONTINUE_ON_FAILURE] == "true");
|
var continueOnFailure = (args[cmisserver.ARG_CONTINUE_ON_FAILURE] == "true");
|
||||||
|
|
||||||
// Intentionally pass allVersions=false, even though this isn't the default!
|
// Intentionally pass allVersions=false, even though this isn't the default!
|
||||||
cmis.deleteTree(node, status, continueOnFailure, unfileObjects != "delete", false);
|
cmisserver.deleteTree(node, status, continueOnFailure, unfileObjects != "delete", false);
|
||||||
}
|
}
|
||||||
|
@@ -19,29 +19,29 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// rendition filter
|
// rendition filter
|
||||||
model.renditionFilter = args[cmis.ARG_RENDITION_FILTER];
|
model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER];
|
||||||
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
if (model.renditionFilter === null || model.renditionFilter.length == 0)
|
||||||
{
|
{
|
||||||
model.renditionFilter = "cmis:none";
|
model.renditionFilter = "cmis:none";
|
||||||
}
|
}
|
||||||
|
|
||||||
// depth
|
// depth
|
||||||
var depth = args[cmis.ARG_DEPTH];
|
var depth = args[cmisserver.ARG_DEPTH];
|
||||||
model.depth = (depth === null) ? 1 : parseInt(depth);
|
model.depth = (depth === null) ? 1 : parseInt(depth);
|
||||||
|
|
||||||
// include allowable actions
|
// include allowable actions
|
||||||
var includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
var includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS];
|
||||||
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
model.includeAllowableActions = (includeAllowableActions == "true" ? true : false);
|
||||||
|
|
||||||
// include relationships
|
// include relationships
|
||||||
model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS];
|
model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS];
|
||||||
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
if (model.includeRelationships == null || model.includeRelationships.length == 0)
|
||||||
{
|
{
|
||||||
model.includeRelationships = "none";
|
model.includeRelationships = "none";
|
||||||
|
@@ -2,7 +2,7 @@ script:
|
|||||||
{
|
{
|
||||||
// query type
|
// query type
|
||||||
var typeId = url.templateArgs.typeId;
|
var typeId = url.templateArgs.typeId;
|
||||||
model.typedef = cmis.queryType(typeId);
|
model.typedef = cmisserver.queryType(typeId);
|
||||||
if (model.typedef === null)
|
if (model.typedef === null)
|
||||||
{
|
{
|
||||||
status.code = 404;
|
status.code = 404;
|
||||||
@@ -12,6 +12,6 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle inherited properties
|
// handle inherited properties
|
||||||
var includeInheritedProperties = args[cmis.ARG_INCLUDE_INHERITED_PROPERTIES];
|
var includeInheritedProperties = args[cmisserver.ARG_INCLUDE_INHERITED_PROPERTIES];
|
||||||
model.includeInheritedProperties = includeInheritedProperties == "false" ? false : true;
|
model.includeInheritedProperties = includeInheritedProperties == "false" ? false : true;
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
script:
|
script:
|
||||||
{
|
{
|
||||||
var page = paging.createPageOrWindow(args);
|
var page = paging.createPageOrWindow(args);
|
||||||
var typeId = args[cmis.ARG_TYPE_ID];
|
var typeId = args[cmisserver.ARG_TYPE_ID];
|
||||||
if (typeId === null)
|
if (typeId === null)
|
||||||
{
|
{
|
||||||
typeId = url.templateArgs[cmis.ARG_TYPE_ID];
|
typeId = url.templateArgs[cmisserver.ARG_TYPE_ID];
|
||||||
}
|
}
|
||||||
if (typeId === null)
|
if (typeId === null)
|
||||||
{
|
{
|
||||||
// query for base types
|
// query for base types
|
||||||
var paged = cmis.queryTypeChildren(null, page);
|
var paged = cmisserver.queryTypeChildren(null, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
model.typedef = null;
|
model.typedef = null;
|
||||||
@@ -17,7 +17,7 @@ script:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// query a specific type and its children
|
// query a specific type and its children
|
||||||
var typedef = cmis.queryType(typeId);
|
var typedef = cmisserver.queryType(typeId);
|
||||||
if (typedef === null)
|
if (typedef === null)
|
||||||
{
|
{
|
||||||
status.code = 404;
|
status.code = 404;
|
||||||
@@ -25,13 +25,13 @@ script:
|
|||||||
status.redirect = true;
|
status.redirect = true;
|
||||||
break script;
|
break script;
|
||||||
}
|
}
|
||||||
var paged = cmis.queryTypeChildren(typedef, page);
|
var paged = cmisserver.queryTypeChildren(typedef, page);
|
||||||
model.results = paged.results;
|
model.results = paged.results;
|
||||||
model.cursor = paged.cursor;
|
model.cursor = paged.cursor;
|
||||||
model.typedef = typedef;
|
model.typedef = typedef;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle property definitions
|
// handle property definitions
|
||||||
var includePropertyDefinitions = args[cmis.ARG_INCLUDE_PROPERTY_DEFINITIONS];
|
var includePropertyDefinitions = args[cmisserver.ARG_INCLUDE_PROPERTY_DEFINITIONS];
|
||||||
model.includePropertyDefinitions = includePropertyDefinitions == "true" ? true : false;
|
model.includePropertyDefinitions = includePropertyDefinitions == "true" ? true : false;
|
||||||
}
|
}
|
@@ -1,22 +1,22 @@
|
|||||||
script:
|
script:
|
||||||
{
|
{
|
||||||
// extract type
|
// extract type
|
||||||
var typeId = args[cmis.ARG_TYPE_ID];
|
var typeId = args[cmisserver.ARG_TYPE_ID];
|
||||||
if (typeId === null)
|
if (typeId === null)
|
||||||
{
|
{
|
||||||
typeId = url.templateArgs[cmis.ARG_TYPE_ID];
|
typeId = url.templateArgs[cmisserver.ARG_TYPE_ID];
|
||||||
}
|
}
|
||||||
|
|
||||||
// descend from root
|
// descend from root
|
||||||
if (typeId === null)
|
if (typeId === null)
|
||||||
{
|
{
|
||||||
var paged = cmis.queryTypeChildren(null, paging.createUnlimitedPage());
|
var paged = cmisserver.queryTypeChildren(null, paging.createUnlimitedPage());
|
||||||
model.basetypes = paged.results;
|
model.basetypes = paged.results;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// query a specific type
|
// query a specific type
|
||||||
var typedef = cmis.queryType(typeId);
|
var typedef = cmisserver.queryType(typeId);
|
||||||
if (typedef === null)
|
if (typedef === null)
|
||||||
{
|
{
|
||||||
status.code = 404;
|
status.code = 404;
|
||||||
@@ -28,7 +28,7 @@ script:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// depth
|
// depth
|
||||||
var depth = args[cmis.ARG_DEPTH];
|
var depth = args[cmisserver.ARG_DEPTH];
|
||||||
if (depth == 0)
|
if (depth == 0)
|
||||||
{
|
{
|
||||||
status.code = 500;
|
status.code = 500;
|
||||||
@@ -39,6 +39,6 @@ script:
|
|||||||
model.depth = (depth === null) ? -1 : parseInt(depth);
|
model.depth = (depth === null) ? -1 : parseInt(depth);
|
||||||
|
|
||||||
// handle property definitions
|
// handle property definitions
|
||||||
var includePropertyDefinitions = args[cmis.ARG_INCLUDE_PROPERTY_DEFINITIONS];
|
var includePropertyDefinitions = args[cmisserver.ARG_INCLUDE_PROPERTY_DEFINITIONS];
|
||||||
model.includePropertyDefinitions = includePropertyDefinitions == "true" ? true : false;
|
model.includePropertyDefinitions = includePropertyDefinitions == "true" ? true : false;
|
||||||
}
|
}
|
@@ -12,12 +12,12 @@ script:
|
|||||||
model.node = object.node;
|
model.node = object.node;
|
||||||
|
|
||||||
// property filter
|
// property filter
|
||||||
model.filter = args[cmis.ARG_FILTER];
|
model.filter = args[cmisserver.ARG_FILTER];
|
||||||
if (model.filter === null)
|
if (model.filter === null)
|
||||||
{
|
{
|
||||||
model.filter = "*";
|
model.filter = "*";
|
||||||
}
|
}
|
||||||
|
|
||||||
// retrieve versions
|
// retrieve versions
|
||||||
model.nodes = cmis.getAllVersions(model.node);
|
model.nodes = cmisserver.getAllVersions(model.node);
|
||||||
}
|
}
|
||||||
|
@@ -11,8 +11,10 @@
|
|||||||
<constructor-arg>
|
<constructor-arg>
|
||||||
<list>
|
<list>
|
||||||
<value>classpath:alfresco/web-scripts-config.xml</value>
|
<value>classpath:alfresco/web-scripts-config.xml</value>
|
||||||
|
<value>classpath:alfresco/web-scripts-cmis-config.xml</value>
|
||||||
<value>classpath:alfresco/extension/web-api-config-custom.xml</value> <!-- for backwards compatibility -->
|
<value>classpath:alfresco/extension/web-api-config-custom.xml</value> <!-- for backwards compatibility -->
|
||||||
<value>classpath:alfresco/extension/web-scripts-config-custom.xml</value>
|
<value>classpath:alfresco/extension/web-scripts-config-custom.xml</value>
|
||||||
|
<value>classpath:alfresco/extension/web-scripts-cmis-config.xml</value>
|
||||||
</list>
|
</list>
|
||||||
</constructor-arg>
|
</constructor-arg>
|
||||||
</bean>
|
</bean>
|
||||||
@@ -142,7 +144,7 @@
|
|||||||
<entry key="paging">
|
<entry key="paging">
|
||||||
<ref bean="webscripts.js.paging"/>
|
<ref bean="webscripts.js.paging"/>
|
||||||
</entry>
|
</entry>
|
||||||
<entry key="cmisclient">
|
<entry key="cmis">
|
||||||
<ref bean="webscripts.js.cmis.client" />
|
<ref bean="webscripts.js.cmis.client" />
|
||||||
</entry>
|
</entry>
|
||||||
</map>
|
</map>
|
||||||
@@ -313,8 +315,8 @@
|
|||||||
<property name="CMISService" ref="CMISService" />
|
<property name="CMISService" ref="CMISService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="webscripts.js.cmis" parent="baseJavaScriptExtension" class="org.alfresco.repo.cmis.rest.CMISScript">
|
<bean id="webscripts.js.cmisserver" parent="baseJavaScriptExtension" class="org.alfresco.repo.cmis.rest.CMISScript">
|
||||||
<property name="extensionName"><value>cmis</value></property>
|
<property name="extensionName"><value>cmisserver</value></property>
|
||||||
<property name="serviceRegistry" ref="ServiceRegistry" />
|
<property name="serviceRegistry" ref="ServiceRegistry" />
|
||||||
<property name="CMISService" ref="CMISService" />
|
<property name="CMISService" ref="CMISService" />
|
||||||
<property name="CMISDictionaryService" ref="CMISDictionaryService" />
|
<property name="CMISDictionaryService" ref="CMISDictionaryService" />
|
||||||
@@ -369,42 +371,20 @@
|
|||||||
<!-- CMIS Client -->
|
<!-- CMIS Client -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
<bean id="webscripts.js.cmis.client" class="org.alfresco.repo.cmis.client.CMISLocalConnectionManagerImpl">
|
<bean id="webscript.org.alfresco.cmis.client.content.get" class="org.alfresco.repo.cmis.client.CMISContentStreamWebScript" parent="webscript">
|
||||||
<property name="authenticationService" ref="AuthenticationService" />
|
<property name="connectionManager" ref="webscripts.js.cmis.client" />
|
||||||
<property name="cmisConnector" ref="CMISConnector" />
|
|
||||||
<property name="servers">
|
|
||||||
<list>
|
|
||||||
<map>
|
|
||||||
<entry key="name" value="demo"/>
|
|
||||||
<entry key="description" value="cmis.alfresco.com"/>
|
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.spi.type" value="atompub"/>
|
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.atompub.url" value="http://cmis.alfresco.com/service/cmis"/>
|
|
||||||
</map>
|
|
||||||
</list>
|
|
||||||
</property>
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<!--
|
<bean id="webscripts.js.cmis.client" class="org.alfresco.repo.cmis.client.CMISLocalConnectionManagerImpl" init-method="init">
|
||||||
<bean id="webscripts.js.cmis.client" class="org.alfresco.repo.cmis.client.CMISRemoteConnectionManagerImpl">
|
|
||||||
<property name="authenticationService" ref="AuthenticationService" />
|
<property name="authenticationService" ref="AuthenticationService" />
|
||||||
<property name="defaultServer">
|
<property name="configService" ref="webscripts.config" />
|
||||||
<map>
|
<property name="cmisConnector" ref="CMISConnector" />
|
||||||
<entry key="name" value="default"/>
|
</bean>
|
||||||
<entry key="description" value="Default server"/>
|
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.spi.type" value="atompub"/>
|
<!--
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.atompub.url" value="http://<host>/service/cmis"/>
|
<bean id="webscripts.js.cmis.client" class="org.alfresco.repo.cmis.client.CMISRemoteConnectionManagerImpl" init-method="init">
|
||||||
</map>
|
<property name="authenticationService" ref="AuthenticationService" />
|
||||||
</property>
|
<property name="configService" ref="webscripts.config" />
|
||||||
<property name="servers">
|
|
||||||
<list>
|
|
||||||
<map>
|
|
||||||
<entry key="name" value="demo"/>
|
|
||||||
<entry key="description" value="cmis.alfresco.com"/>
|
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.spi.type" value="atompub"/>
|
|
||||||
<entry key="org.apache.chemistry.opencmis.binding.atompub.url" value="http://cmis.alfresco.com/service/cmis"/>
|
|
||||||
</map>
|
|
||||||
</list>
|
|
||||||
</property>
|
|
||||||
</bean>
|
</bean>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
25
config/alfresco/web-scripts-cmis-config.xml
Normal file
25
config/alfresco/web-scripts-cmis-config.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!-- -->
|
||||||
|
<!-- CMIS Client Configuration -->
|
||||||
|
<!-- -->
|
||||||
|
|
||||||
|
<alfresco-config>
|
||||||
|
|
||||||
|
<plug-ins>
|
||||||
|
<element-readers>
|
||||||
|
<element-reader element-name="cmis-servers" class="org.alfresco.repo.cmis.client.CMISServersConfigElementReader" />
|
||||||
|
</element-readers>
|
||||||
|
</plug-ins>
|
||||||
|
|
||||||
|
<config evaluator="string-compare" condition="CMIS">
|
||||||
|
<cmis-servers>
|
||||||
|
<server>
|
||||||
|
<parameter key="name" value="alfresco-public-cmis"/>
|
||||||
|
<parameter key="description" value="Public Alfresco 3.4 CMIS Server (cmis.alfresco.com)"/>
|
||||||
|
<parameter key="org.apache.chemistry.opencmis.binding.spi.type" value="atompub"/>
|
||||||
|
<parameter key="org.apache.chemistry.opencmis.binding.atompub.url" value="http://cmis.alfresco.com/service/cmis"/>
|
||||||
|
<parameter key="org.apache.chemistry.opencmis.binding.compression" value="true"/>
|
||||||
|
</server>
|
||||||
|
</cmis-servers>
|
||||||
|
</config>
|
||||||
|
|
||||||
|
</alfresco-config>
|
@@ -19,7 +19,6 @@
|
|||||||
package org.alfresco.repo.cmis.client;
|
package org.alfresco.repo.cmis.client;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
@@ -33,27 +32,38 @@ import org.apache.chemistry.opencmis.client.api.Session;
|
|||||||
import org.apache.chemistry.opencmis.client.api.SessionFactory;
|
import org.apache.chemistry.opencmis.client.api.SessionFactory;
|
||||||
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
|
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
|
||||||
import org.apache.chemistry.opencmis.commons.SessionParameter;
|
import org.apache.chemistry.opencmis.commons.SessionParameter;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.extensions.config.ConfigService;
|
||||||
|
|
||||||
public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectionManager, InitializingBean
|
/**
|
||||||
|
* Connection manager base class.
|
||||||
|
*/
|
||||||
|
public abstract class AbstractCMISConnectionManagerImpl extends CMISHelper implements CMISConnectionManager
|
||||||
{
|
{
|
||||||
public static final String SERVER_NAME = "name";
|
public static final String SERVER_NAME = "name";
|
||||||
public static final String SERVER_DESCRIPTION = "description";
|
public static final String SERVER_DESCRIPTION = "description";
|
||||||
public static final String LOCAL_CONNECTION_ID = "local";
|
public static final String DEFAULT_CONNECTION_ID = "default";
|
||||||
public static final char RESERVED_ID_CHAR = '$';
|
public static final char RESERVED_ID_CHAR = '$';
|
||||||
|
|
||||||
|
protected ConfigService configService;
|
||||||
protected AuthenticationService authenticationService;
|
protected AuthenticationService authenticationService;
|
||||||
|
|
||||||
protected SessionFactory sessionFactory;
|
protected final SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
|
||||||
|
|
||||||
protected LinkedHashMap<String, CMISConnection> sharedConnections;
|
protected LinkedHashMap<String, CMISConnection> sharedConnections;
|
||||||
protected LinkedHashMap<String, CMISConnection> userConnections;
|
protected LinkedHashMap<String, CMISConnection> userConnections;
|
||||||
protected int userConnectionsCapacity = 1000;
|
protected int userConnectionsCapacity = 1000;
|
||||||
protected int sharedConnectionsCapacity = 1000;
|
protected int sharedConnectionsCapacity = 100;
|
||||||
|
|
||||||
protected Map<String, CMISServer> servers;
|
protected Map<String, CMISServer> servers;
|
||||||
|
|
||||||
protected ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
||||||
|
|
||||||
|
// --- set up ---
|
||||||
|
|
||||||
|
public void setConfigService(ConfigService configService)
|
||||||
|
{
|
||||||
|
this.configService = configService;
|
||||||
|
}
|
||||||
|
|
||||||
public void setAuthenticationService(AuthenticationService authenticationService)
|
public void setAuthenticationService(AuthenticationService authenticationService)
|
||||||
{
|
{
|
||||||
@@ -70,28 +80,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
this.sharedConnectionsCapacity = sharedConnectionsCapacity;
|
this.sharedConnectionsCapacity = sharedConnectionsCapacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setServers(List<Map<String, String>> serverList)
|
public void init()
|
||||||
{
|
|
||||||
servers = new HashMap<String, CMISServer>();
|
|
||||||
|
|
||||||
for (Map<String, String> serverData : serverList)
|
|
||||||
{
|
|
||||||
CMISServer server = createServerDefinition(serverData);
|
|
||||||
if (server != null)
|
|
||||||
{
|
|
||||||
servers.put(server.getName(), server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception
|
|
||||||
{
|
{
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sessionFactory = SessionFactoryImpl.newInstance();
|
// create shared connection LRU cache
|
||||||
|
|
||||||
sharedConnections = new LinkedHashMap<String, CMISConnection>(sharedConnectionsCapacity,
|
sharedConnections = new LinkedHashMap<String, CMISConnection>(sharedConnectionsCapacity,
|
||||||
(int) Math.ceil(sharedConnectionsCapacity / 0.75) + 1, true)
|
(int) Math.ceil(sharedConnectionsCapacity / 0.75) + 1, true)
|
||||||
{
|
{
|
||||||
@@ -104,6 +98,7 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// create user connection LRU cache
|
||||||
userConnections = new LinkedHashMap<String, CMISConnection>(userConnectionsCapacity,
|
userConnections = new LinkedHashMap<String, CMISConnection>(userConnectionsCapacity,
|
||||||
(int) Math.ceil(userConnectionsCapacity / 0.75) + 1, true)
|
(int) Math.ceil(userConnectionsCapacity / 0.75) + 1, true)
|
||||||
{
|
{
|
||||||
@@ -115,15 +110,33 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
return size() > userConnectionsCapacity;
|
return size() > userConnectionsCapacity;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// get predefined server definitions
|
||||||
|
CMISServersConfigElement cmisServersConfig = (CMISServersConfigElement) configService.getConfig("CMIS")
|
||||||
|
.getConfigElement("cmis-servers");
|
||||||
|
if (cmisServersConfig != null && cmisServersConfig.getServerDefinitions() != null)
|
||||||
|
{
|
||||||
|
servers = cmisServersConfig.getServerDefinitions();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
servers = new HashMap<String, CMISServer>();
|
||||||
|
}
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
lock.writeLock().unlock();
|
lock.writeLock().unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- connections ---
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CMISConnection createUserConnection(CMISServer server, String connectionId)
|
public CMISConnection createUserConnection(CMISServer server, String connectionId)
|
||||||
{
|
{
|
||||||
|
if (connectionId == null || connectionId.length() == 0 || connectionId.indexOf(RESERVED_ID_CHAR) > -1)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Invalid connection id!");
|
||||||
|
}
|
||||||
|
|
||||||
String currentUser = authenticationService.getCurrentUserName();
|
String currentUser = authenticationService.getCurrentUserName();
|
||||||
if (currentUser == null)
|
if (currentUser == null)
|
||||||
{
|
{
|
||||||
@@ -142,7 +155,7 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
throw new IllegalStateException("Connection id is already in use!");
|
throw new IllegalStateException("Connection id is already in use!");
|
||||||
}
|
}
|
||||||
|
|
||||||
connection = createConnection(server, userConnectionId);
|
connection = createConnection(server, userConnectionId, false);
|
||||||
|
|
||||||
userConnections.put(userConnectionId, connection);
|
userConnections.put(userConnectionId, connection);
|
||||||
} finally
|
} finally
|
||||||
@@ -161,6 +174,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
@Override
|
@Override
|
||||||
public CMISConnection createSharedConnection(CMISServer server, String connectionId)
|
public CMISConnection createSharedConnection(CMISServer server, String connectionId)
|
||||||
{
|
{
|
||||||
|
if (connectionId == null || connectionId.length() == 0 || connectionId.indexOf(RESERVED_ID_CHAR) > -1
|
||||||
|
|| DEFAULT_CONNECTION_ID.equals(connectionId))
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Invalid connection id!");
|
||||||
|
}
|
||||||
|
|
||||||
CMISConnection connection;
|
CMISConnection connection;
|
||||||
|
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
@@ -171,9 +190,9 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
throw new IllegalStateException("Connection id is already in use!");
|
throw new IllegalStateException("Connection id is already in use!");
|
||||||
}
|
}
|
||||||
|
|
||||||
connection = createConnection(server, connectionId);
|
connection = createConnection(server, connectionId, true);
|
||||||
|
|
||||||
sharedConnections.put(connection.getId(), connection);
|
sharedConnections.put(connection.getInternalId(), connection);
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
lock.writeLock().unlock();
|
lock.writeLock().unlock();
|
||||||
@@ -182,23 +201,42 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CMISConnection createConnection(CMISServer server, String connectionId)
|
protected CMISConnection createConnection(CMISServer server, String connectionId, boolean isShared)
|
||||||
{
|
{
|
||||||
if (connectionId == null || connectionId.length() == 0 || connectionId.indexOf(RESERVED_ID_CHAR) > -1)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Invalid connection id!");
|
|
||||||
}
|
|
||||||
|
|
||||||
Session session = createSession(server.getParameters());
|
Session session = createSession(server.getParameters());
|
||||||
String username = server.getParameters().get(SessionParameter.USER);
|
String username = server.getParameters().get(SessionParameter.USER);
|
||||||
|
|
||||||
return new CMISConnectionImpl(this, connectionId, session, server, username, false);
|
return new CMISConnectionImpl(this, connectionId, session, server, username, false, isShared);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract CMISConnection getConnection();
|
public abstract CMISConnection getConnection();
|
||||||
|
|
||||||
public Collection<CMISConnection> getUserConnections()
|
public CMISConnection getConnection(String connectionId)
|
||||||
|
{
|
||||||
|
lock.writeLock().lock();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CMISConnection connection = sharedConnections.get(connectionId);
|
||||||
|
if (connection != null)
|
||||||
|
{
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
String currentUser = authenticationService.getCurrentUserName();
|
||||||
|
if (currentUser == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String userConnectionId = createUserConnectionId(currentUser, connectionId);
|
||||||
|
return userConnections.get(userConnectionId);
|
||||||
|
} finally
|
||||||
|
{
|
||||||
|
lock.writeLock().unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CMISConnection> getUserConnections()
|
||||||
{
|
{
|
||||||
String currentUser = authenticationService.getCurrentUserName();
|
String currentUser = authenticationService.getCurrentUserName();
|
||||||
if (currentUser == null)
|
if (currentUser == null)
|
||||||
@@ -213,16 +251,17 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
|
|
||||||
for (CMISConnection conn : userConnections.values())
|
for (CMISConnection conn : userConnections.values())
|
||||||
{
|
{
|
||||||
int idx = conn.getId().indexOf(RESERVED_ID_CHAR);
|
int idx = conn.getInternalId().indexOf(RESERVED_ID_CHAR);
|
||||||
if (idx > -1)
|
if (idx > -1)
|
||||||
{
|
{
|
||||||
if (currentUser.equals(conn.getId().substring(idx + 1)))
|
if (currentUser.equals(conn.getInternalId().substring(idx + 1)))
|
||||||
{
|
{
|
||||||
result.add(conn);
|
result.add(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.sort(result);
|
||||||
return Collections.unmodifiableList(result);
|
return Collections.unmodifiableList(result);
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
@@ -230,43 +269,15 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMISConnection getUserConnections(String connectionId)
|
public List<CMISConnection> getSharedConnections()
|
||||||
{
|
|
||||||
String currentUser = authenticationService.getCurrentUserName();
|
|
||||||
if (currentUser == null)
|
|
||||||
{
|
|
||||||
throw new IllegalStateException("No current user!");
|
|
||||||
}
|
|
||||||
|
|
||||||
lock.writeLock().lock();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
String userConnectionId = createUserConnectionId(currentUser, connectionId);
|
|
||||||
return userConnections.get(userConnectionId);
|
|
||||||
} finally
|
|
||||||
{
|
|
||||||
lock.writeLock().unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<CMISConnection> getSharedConnections()
|
|
||||||
{
|
{
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableCollection(sharedConnections.values());
|
List<CMISConnection> result = new ArrayList<CMISConnection>(sharedConnections.values());
|
||||||
} finally
|
|
||||||
{
|
|
||||||
lock.writeLock().unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public CMISConnection getSharedConnection(String connectionId)
|
Collections.sort(result);
|
||||||
{
|
return Collections.unmodifiableList(result);
|
||||||
lock.writeLock().lock();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return sharedConnections.get(connectionId);
|
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
lock.writeLock().unlock();
|
lock.writeLock().unlock();
|
||||||
@@ -275,7 +286,7 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
|
|
||||||
public void removeConnection(CMISConnection connection)
|
public void removeConnection(CMISConnection connection)
|
||||||
{
|
{
|
||||||
if (connection == null || connection.getId() == null)
|
if (connection == null || connection.getInternalId() == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -283,19 +294,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (connection.isLocal())
|
if (connection.isShared())
|
||||||
{
|
{
|
||||||
userConnections.remove(LOCAL_CONNECTION_ID);
|
sharedConnections.remove(connection.getInternalId());
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
int idx = connection.getId().indexOf(RESERVED_ID_CHAR);
|
userConnections.remove(connection.getInternalId());
|
||||||
if (idx == -1)
|
|
||||||
{
|
|
||||||
sharedConnections.remove(connection.getId());
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
userConnections.remove(connection.getId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} finally
|
} finally
|
||||||
{
|
{
|
||||||
@@ -314,25 +318,23 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// --- servers ---
|
||||||
public Collection<CMISServer> getServerDefinitions()
|
|
||||||
|
public List<CMISServer> getServerDefinitions()
|
||||||
{
|
{
|
||||||
return servers == null ? null : servers.values();
|
return servers == null ? null : Collections.unmodifiableList(new ArrayList<CMISServer>(servers.values()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CMISServer getServerDefinition(String serverName)
|
public CMISServer getServerDefinition(String serverName)
|
||||||
{
|
{
|
||||||
return servers == null ? null : servers.get(serverName);
|
return servers == null ? null : servers.get(serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CMISServer createServerDefinition(String serverName, Map<String, String> parameters)
|
public CMISServer createServerDefinition(String serverName, Map<String, String> parameters)
|
||||||
{
|
{
|
||||||
return new CMISServerImpl(serverName, null, parameters);
|
return new CMISServerImpl(serverName, null, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CMISServer createServerDefinition(CMISServer server, String username, String password)
|
public CMISServer createServerDefinition(CMISServer server, String username, String password)
|
||||||
{
|
{
|
||||||
if (server == null)
|
if (server == null)
|
||||||
@@ -347,7 +349,6 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
return new CMISServerImpl(server.getName(), server.getDescription(), parameters);
|
return new CMISServerImpl(server.getName(), server.getDescription(), parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CMISServer createServerDefinition(CMISServer server, String username, String password, String repositoryId)
|
public CMISServer createServerDefinition(CMISServer server, String username, String password, String repositoryId)
|
||||||
{
|
{
|
||||||
if (server == null)
|
if (server == null)
|
||||||
@@ -384,7 +385,6 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Repository> getRepositories(CMISServer server)
|
public List<Repository> getRepositories(CMISServer server)
|
||||||
{
|
{
|
||||||
if (server == null)
|
if (server == null)
|
||||||
|
@@ -23,17 +23,24 @@ import org.apache.chemistry.opencmis.client.api.Session;
|
|||||||
/**
|
/**
|
||||||
* Represents a CMIS connection.
|
* Represents a CMIS connection.
|
||||||
*/
|
*/
|
||||||
public interface CMISConnection
|
public interface CMISConnection extends Comparable<CMISConnection>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Gets connection id.
|
* Gets the connection id.
|
||||||
*
|
*
|
||||||
* @return connection id
|
* @return connection id
|
||||||
*/
|
*/
|
||||||
String getId();
|
String getId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets OpenCMIS Session.
|
* Gets the internal connection id.
|
||||||
|
*
|
||||||
|
* @return connection id
|
||||||
|
*/
|
||||||
|
String getInternalId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the OpenCMIS Session.
|
||||||
*
|
*
|
||||||
* @return OpenCMIS session
|
* @return OpenCMIS session
|
||||||
*/
|
*/
|
||||||
@@ -54,9 +61,19 @@ public interface CMISConnection
|
|||||||
String getUserName();
|
String getUserName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the connection is a local or a remote connection.
|
* Indicates if the connection is shared by multiple users.
|
||||||
*/
|
*/
|
||||||
boolean isLocal();
|
boolean isShared();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the connection is the default connection.
|
||||||
|
*/
|
||||||
|
boolean isDefault();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates is the repository supports queries.
|
||||||
|
*/
|
||||||
|
boolean supportsQuery();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Releases the CMIS session and removes the connection from connection
|
* Releases the CMIS session and removes the connection from connection
|
||||||
|
@@ -19,19 +19,22 @@
|
|||||||
package org.alfresco.repo.cmis.client;
|
package org.alfresco.repo.cmis.client;
|
||||||
|
|
||||||
import org.apache.chemistry.opencmis.client.api.Session;
|
import org.apache.chemistry.opencmis.client.api.Session;
|
||||||
|
import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
|
||||||
|
|
||||||
public class CMISConnectionImpl implements CMISConnection
|
public class CMISConnectionImpl implements CMISConnection
|
||||||
{
|
{
|
||||||
private AbstractCMISConnectionManagerImpl connectionManager;
|
private AbstractCMISConnectionManagerImpl connectionManager;
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
|
private String internalId;
|
||||||
private Session session;
|
private Session session;
|
||||||
private CMISServer server;
|
private CMISServer server;
|
||||||
private String username;
|
private String username;
|
||||||
private boolean isLocal;
|
private boolean isDefault;
|
||||||
|
private boolean isShared;
|
||||||
|
|
||||||
public CMISConnectionImpl(AbstractCMISConnectionManagerImpl connectionManager, String id, Session session,
|
public CMISConnectionImpl(AbstractCMISConnectionManagerImpl connectionManager, String id, Session session,
|
||||||
CMISServer server, String username, boolean isLocal)
|
CMISServer server, String username, boolean isDefault, boolean isShared)
|
||||||
{
|
{
|
||||||
if (connectionManager == null)
|
if (connectionManager == null)
|
||||||
{
|
{
|
||||||
@@ -49,47 +52,75 @@ public class CMISConnectionImpl implements CMISConnection
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.connectionManager = connectionManager;
|
this.connectionManager = connectionManager;
|
||||||
this.id = id;
|
this.internalId = id;
|
||||||
|
int x = id.indexOf(AbstractCMISConnectionManagerImpl.RESERVED_ID_CHAR);
|
||||||
|
this.id = (x > -1 ? id.substring(0, x) : id);
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.isLocal = isLocal;
|
this.isDefault = isDefault;
|
||||||
|
this.isShared = isShared;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId()
|
public String getId()
|
||||||
{
|
{
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getInternalId()
|
||||||
|
{
|
||||||
|
return internalId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Session getSession()
|
public Session getSession()
|
||||||
{
|
{
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CMISServer getServer()
|
public CMISServer getServer()
|
||||||
{
|
{
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getUserName()
|
public String getUserName()
|
||||||
{
|
{
|
||||||
return username;
|
return username;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public boolean isDefault()
|
||||||
public boolean isLocal()
|
|
||||||
{
|
{
|
||||||
return isLocal;
|
return isDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isShared()
|
||||||
|
{
|
||||||
|
return isShared;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsQuery()
|
||||||
|
{
|
||||||
|
if (session == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (session.getRepositoryInfo().getCapabilities() == null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return session.getRepositoryInfo().getCapabilities().getQueryCapability() != CapabilityQuery.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close()
|
public void close()
|
||||||
{
|
{
|
||||||
connectionManager.removeConnection(this);
|
connectionManager.removeConnection(this);
|
||||||
session = null;
|
session = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int compareTo(CMISConnection conn)
|
||||||
|
{
|
||||||
|
return id.compareTo(conn.getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user