diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/acl.put.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/acl.put.js index a4a62ee795..f48717cf9c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/acl.put.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/acl.put.js @@ -34,5 +34,5 @@ script: } } } - cmis.applyACL(model.node, principalIds, permissions); + cmisserver.applyACL(model.node, principalIds, permissions); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/changes.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/changes.get.js index 3a9cc5a5ac..c6e03e932f 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/changes.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/changes.get.js @@ -3,24 +3,24 @@ script: { // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null || model.filter == "") { model.filter = "*"; } // ACL - model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true"; + model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true"; // Change log - var changeLogToken = args[cmis.ARG_CHANGE_LOG_TOKEN]; + var changeLogToken = args[cmisserver.ARG_CHANGE_LOG_TOKEN]; if (changeLogToken == "") { changeLogToken = null; } - var maxItems = args[cmis.ARG_MAX_ITEMS]; + var maxItems = args[cmisserver.ARG_MAX_ITEMS]; var maxItemsInt = maxItems != null && maxItems != "" ? parseInt(maxItems) : null; - model.changeLog = cmis.getChangeLog(changeLogToken, maxItemsInt); + model.changeLog = cmisserver.getChangeLog(changeLogToken, maxItemsInt); // return value 1; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.get.js index 1870c0eb49..dc3ddaf9f2 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.get.js @@ -4,7 +4,7 @@ script: { // locate (optional) folder model.folder = null; - var folderId = args[cmis.ARG_FOLDER_ID]; + var folderId = args[cmisserver.ARG_FOLDER_ID]; if (folderId !== null) { var folder = getObjectFromObjectId(folderId); @@ -25,25 +25,25 @@ script: model.includeDescendants = (args.includeDescendants == "true") ? true : false; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.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) { model.renditionFilter = "cmis:none"; } // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; @@ -51,7 +51,7 @@ script: // retrieve checked-out 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.cursor = paged.cursor; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.post.atomentry.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.post.atomentry.js index 17d5e2309e..9d84c1a60f 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.post.atomentry.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/checkedout.post.atomentry.js @@ -31,7 +31,7 @@ script: model.node = object.node; // checkout - model.pwc = cmis.checkOut(objectId); + model.pwc = cmisserver.checkOut(objectId); // setup for 201 Created response // TODO: set Content-Location diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/children.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/children.get.js index 3373c358ee..6cbd191259 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/children.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/children.get.js @@ -11,8 +11,8 @@ script: model.node = object.node; // handle filters - model.types = args[cmis.ARG_TYPES] === null ? cmis.defaultTypesFilter : args[cmis.ARG_TYPES]; - if (!cmis.isValidTypesFilter(model.types)) + model.types = args[cmisserver.ARG_TYPES] === null ? cmisserver.defaultTypesFilter : args[cmisserver.ARG_TYPES]; + if (!cmisserver.isValidTypesFilter(model.types)) { status.code = 400; status.message = "Types filter '" + model.types + "' unknown"; @@ -21,28 +21,28 @@ script: } // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.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) { model.renditionFilter = "cmis:none"; } // order by - var orderBy = args[cmis.ARG_ORDER_BY]; + var orderBy = args[cmisserver.ARG_ORDER_BY]; // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; @@ -50,7 +50,7 @@ script: // retrieve children 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.cursor = paged.cursor; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/children.post.atom.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/children.post.atom.js index 4e7a0ad8cf..81201c957c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/children.post.atom.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/children.post.atom.js @@ -22,7 +22,7 @@ script: model.parent = parent.node; // versioning state - var versioningState = args[cmis.ARG_VERSIONING_STATE]; + var versioningState = args[cmisserver.ARG_VERSIONING_STATE]; if (versioningState === null || versioningState.length == 0) { versioningState = "major"; @@ -32,7 +32,7 @@ script: var object = entry.getExtension(atom.names.cmisra_object); var objectIdProp = (object !== null) ? object.objectId : 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; if (objectId == null) @@ -54,7 +54,7 @@ script: } node = object.node; - cmis.addObjectToFolder(node, model.parent); + cmisserver.addObjectToFolder(node, model.parent); } else { @@ -69,7 +69,7 @@ script: node = object.node; // perform move - cmis.moveObject(node, model.parent, sourceFolderId); + cmisserver.moveObject(node, model.parent, sourceFolderId); } // success diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/cmis.lib.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/cmis.lib.html.ftl new file mode 100644 index 0000000000..30adeea451 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/cmis.lib.html.ftl @@ -0,0 +1,77 @@ +<#macro head> + + <#nested> + + + + +<#macro header> + + + +<#macro navigation> +<@header/> + + + +<#macro connectionNavigation connection> +<@header/> + + + +<#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 + +<#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>${v} + <#else> + <@value val ; v>${v} + + <#if val_has_next><#nested> + + + +<#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> + + + +<#macro resultsHeader skipCount pageNumItems> +<#if pageNumItems == 0>No Results Found<#else>Results ${skipCount + 1} - ${skipCount + pageNumItems} + + +<#macro objectImage baseTypeId="cmis:document"> +<#if baseTypeId == "cmis:folder"><@image "folder-yellow"/><#else><@image "document"/> + + +<#macro image image height=-1 width=-1> + height="${height}"<#if width !=-1> width="${width}" src="${url.context}/cmis-browser-app/images/${image}<#if image?index_of(".") == -1>.gif"> + + +<#macro button name> + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.desc.xml new file mode 100644 index 0000000000..632f13659a --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.desc.xml @@ -0,0 +1,5 @@ + + CMIS Connect + /cmis-browser-app/connect + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.html.ftl new file mode 100644 index 0000000000..0ed7c11386 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.html.ftl @@ -0,0 +1,35 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + <@cmisLib.head>Connect + +
+ <@cmisLib.navigation>Connect +
+ + + <#if error??> + + + + + + + + + <#else> +
${serverDefinition.name?html} (${serverDefinition.description?html})
Error:${error?html}
Username:
Password:
Repository Id: (leave empty for the first repository)
<@cmisLib.button "connect"/>
+ + + + + + + + + + +
Name:${repoinfo.name}
Id:${repoinfo.id}
Product Name:${repoinfo.productName}
Product Version:${repoinfo.productVersion}
Vendor:${repoinfo.vendorName}
CMIS Version:${repoinfo.cmisVersionSupported}
Return to the connection page
Browse the root folder "${rootFolder.name?html}"
Query the repository
+
+
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.js new file mode 100644 index 0000000000..692f3fcfb1 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connect.post.js @@ -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); +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.desc.xml new file mode 100644 index 0000000000..a4963e101b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.desc.xml @@ -0,0 +1,5 @@ + + CMIS Connections + /cmis-browser-app/c/{conn} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.html.ftl new file mode 100644 index 0000000000..5d0c8fe7fb --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.html.ftl @@ -0,0 +1,10 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>Disconnected Connection + +
+ <@cmisLib.navigation>${conn.id} disconnected +
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.js new file mode 100644 index 0000000000..e6e30b0a92 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connection.delete.js @@ -0,0 +1,5 @@ +script: +{ + model.conn = cmis.getConnection(url.templateArgs["conn"]); + model.conn.close(); +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.desc.xml new file mode 100644 index 0000000000..05c166476d --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Connections + /cmis-browser-app/connections + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.html.ftl new file mode 100644 index 0000000000..b2e8e6b234 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.html.ftl @@ -0,0 +1,56 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>Connections + +
+ <@cmisLib.navigation>Connections + +
+ + + <#if connections?size == 0> + +
My Connections
None
+ <#else> + ServerRepositoryConnectionUser + <#list connections as conn> + + ${conn.server.name!""} + ${conn.server.description!""} + ${conn.session.repositoryInfo.name} + ${conn.id} + ${conn.userName} + info + browse + <#if conn.supportsQuery()>query +
<@cmisLib.button "disconnect"/>
+ + + +
+ + +
query all
+ +
+ + + <#if servers?size == 0> + + <#else> + + <#list servers as server> + + + + + + + +
Available CMIS Servers
None
Server
${server.name!""}${server.description!""}
<@cmisLib.button "connect"/>
+ +
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.js new file mode 100644 index 0000000000..b7b554531c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/connections.get.js @@ -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(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/content.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/content.get.desc.xml new file mode 100644 index 0000000000..e8271693d9 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/content.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Rendition Stream + /cmisbrowser/content?id={objectId} + /cmisbrowser/c/{conn}/content?id={objectId} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.desc.xml new file mode 100644 index 0000000000..2731311994 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Federated Query + /cmis-browser-app/federatedquery?statement={statement?}&maxItems={maxItems?} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.html.ftl new file mode 100644 index 0000000000..ae7c0bda2b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.html.ftl @@ -0,0 +1,70 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>CMIS Federated Query Tool + +
+ <@cmisLib.navigation>Federated Query Tool: ${connectionCount} Connection<#if connectionCount != 1>s +
+ +
+ + + + +
Statement
Page size
<@cmisLib.button "Execute Query"/>
+
+ + <#if results??> + <#list results as result> +
+ + + <#if result.skipCount gt 0> + + <#else> + + + + <#if result.hasMoreItems> + + <#else> + + + +
← Prev← Prev<@cmisLib.resultsHeader result.skipCount result.pageNumItems/> for ${result.conn.server.name?html} (${result.conn.server.description!""}) (${result.conn.userName!"anonymous"?html})Next →Next →
+ +
+ + <#list result.rows as row> + <#assign properties = row.properties> + <#if row_index == 0> + + <#list properties as property> + + + + + + + <#list properties as property> + + + + +
${property.queryName!property.displayName!property.id}
<@cmisLib.propertyvalue property result.conn.id>,
+ + + +
+
+ + + +<#macro incSkipCounts results conn> +<#list results as result>${result.conn.id}_skipCount=<#if result.conn == conn>${result.skipCount + maxItems}<#else>${result.skipCount}<#if result_has_next>& + + +<#macro decSkipCounts results conn> +<#list results as result>${result.conn.id}_skipCount=<#if result.conn == conn>${result.skipCount - maxItems}<#else>${result.skipCount}<#if result_has_next>& + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.js new file mode 100644 index 0000000000..09f2b9d0e1 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/federatedquery.get.js @@ -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; + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.desc.xml new file mode 100644 index 0000000000..cb52703bd3 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Folder Browser + /cmis-browser-app/folder?id={objectId} + /cmis-browser-app/c/{conn}/folder?id={objectId} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.html.ftl new file mode 100644 index 0000000000..8f113f12a2 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.html.ftl @@ -0,0 +1,67 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>${folder.name?html} Folder + +
+ <@cmisLib.connectionNavigation conn>Folder ${folder.name?html} details +
+ + +<#if folderParent?exists> + + + + +<#list folderChildren as child> + + <#if child.baseType.id == "cmis:folder"> + + + + + + <#else> + + + + + + + + +
<@cmisLib.image "up"/>
<@cmisLib.objectImage child.baseType.id/><#if child.lastModifiedBy??>${child.lastModifiedBy?html}<#if child.lastModificationDate??>${child.lastModificationDate.time?datetime}${child.name?html}<@cmisLib.objectImage child.baseType.id?html/><#if child.lastModifiedBy??>${child.lastModifiedBy?html}<#if child.contentStreamLength??>${child.contentStreamLength?c}<#if child.lastModificationDate??>${child.lastModificationDate.time?datetime}${child.name?html}
+ +
+ +
+ + + + + + + + +
Create new folder
Name:
Object Type:
<@cmisLib.button "create"/>
+
+ +
+ +
+ + + + + + + + + +
Upload document
File:
Name:
Object Type:
<@cmisLib.button "upload"/>
+
+ +
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.js new file mode 100644 index 0000000000..81169ab9f6 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.get.js @@ -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(); +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.desc.xml new file mode 100644 index 0000000000..3f673b507e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.desc.xml @@ -0,0 +1,6 @@ + + CMIS Folder Browser + /cmis-browser-app/folder + /cmis-browser-app/c/{conn}/folder + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.html.ftl new file mode 100644 index 0000000000..903fcc7048 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.html.ftl @@ -0,0 +1,30 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + <@cmisLib.head>Connect + +
+ <@cmisLib.navigation>Create +
+ <#if error??> +

${error?html}

+ <#else> +

${object.name?html} created!

+ + <#assign properties = object.properties> + + + <#list properties as property> + + + + + + + +
Properties
IdTypeCardinalityValue(s)
${property.id?html}${property.type?capitalize}<#if property.isMultiValued()>multiple<@cmisLib.propertyvalue property conn.id>,
+ +

Return to folder

+
+
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.js new file mode 100644 index 0000000000..82d6784354 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/folder.post.js @@ -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); + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.desc.xml new file mode 100644 index 0000000000..fa93d7b0cb --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.desc.xml @@ -0,0 +1,6 @@ + + CMIS Object Details + /cmis-browser-app/object + /cmis-browser-app/c/{conn}/object + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.html.ftl new file mode 100644 index 0000000000..bc76bf4a45 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.html.ftl @@ -0,0 +1,38 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + <@cmisLib.head>Delete + +
+ <@cmisLib.navigation>Connect +
+ <#if error??> +

${error?html}

+ <#else> + <#if needsConfirmation??> +

Delete ${object.name?html}?

+ + +
+
+ + + + + <@cmisLib.button "Yes"/> +
+
+
+ + + <@cmisLib.button "No"/> +
+
+ <#else> +

${object.name?html} deleted!

+ + +

Return to folder

+
+
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.js new file mode 100644 index 0000000000..68defd7d82 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.delete.js @@ -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); + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.desc.xml new file mode 100644 index 0000000000..615d3d164c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Object Details + /cmis-browser-app/object?id={objectId} + /cmis-browser-app/c/{conn}/object?id={objectId} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.html.ftl new file mode 100644 index 0000000000..e1e3c9ae99 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.html.ftl @@ -0,0 +1,104 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head><#if isDoc>Document ${object.name}<#else>Folder ${object.path} + +
+ <@cmisLib.connectionNavigation conn><#if isDoc>Document ${object.name}<#else>Folder ${object.path} details +
+ + <#if parent?exists> + + +
Parent Folder ${parent.path}
+
+ + + + + <#if isDoc> + <#if object.contentStreamLength?? && object.contentStreamLength gt 0> + + + <#elseif isFolder> + + + + + +
+ <#if object.contentStreamMimeType??> + <#assign mimetype = " (${object.contentStreamMimeType?html})"> + <#else> + <#assign mimetype = ""> + +
+ + + <@cmisLib.button "View Content${mimetype}"/> +
+
+
+ + <@cmisLib.button "View Children"/> +
+
+
+ + + + <@cmisLib.button "Delete"/> +
+
+ + <#assign renditions = object.renditions![]> + <#if renditions?size gt 0> + + + + <#list renditions as rendition> + + + + + + +
Renditions
KindMimetypeLength
${rendition.kind?html}${rendition.mimeType}<#if rendition.length != -1>${rendition.length?c}
+
+ + + + <#assign properties = object.properties> + + + <#list properties as property> + + + + + + + +
Properties
IdTypeCardinalityValue(s)
${property.id?html}${property.type?capitalize}<#if property.isMultiValued()>multiple<@cmisLib.propertyvalue property conn.id>,
+
+ + + + + <#assign relationships = object.relationships![]> + <#if relationships??> + <#list relationships as relationship> + + + + + + + +
Relationships
IdNameRelated Objects
${relationship.id?html}${relationship.name?html}${relationship.source.name?html} → + ${relationship.target.name?html}
+ +
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.js new file mode 100644 index 0000000000..36a145c13f --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/object.get.js @@ -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); + } + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.desc.xml new file mode 100644 index 0000000000..0db2b2d06c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Query + /cmis-browser-app/query?statement={statement?}&skipCount={skipCount?}&maxItems={maxItems?} + /cmis-browser-app/c/{conn}/query?statement={statement?}&skipCount={skipCount?}&maxItems={maxItems?} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.html.ftl new file mode 100644 index 0000000000..a210553b8b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.html.ftl @@ -0,0 +1,60 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>CMIS Query Tool + +
+ <@cmisLib.connectionNavigation conn>Query Tool +
+ +
+ + + + +
Statement
Page size
<@cmisLib.button "Execute Query"/>
+
+ + <#if rows??> +
+ + + <#if skipCount gt 0> + + <#else> + + + + <#if hasMoreItems> + + <#else> + + + +
← Prev← Prev<@cmisLib.resultsHeader skipCount pageNumItems/>Next →Next →
+ +
+ + <#list rows as row> + <#assign properties = row.properties> + <#if row_index == 0> + + <#list properties as property> + + + + + + + <#list properties as property> + + + + +
${property.queryName!property.displayName!property.id?html}
<@cmisLib.propertyvalue property conn.id>,
+ + +
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.js new file mode 100644 index 0000000000..dd176999ad --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/query.get.js @@ -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; + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/rendition.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/rendition.get.desc.xml new file mode 100644 index 0000000000..d78568e1d1 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/rendition.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Content Stream + /cmis-browser-app/rendition/{streamId}?id={objectId} + /cmis-browser-app/c/{conn}/rendition/{streamId}?id={objectId} + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.desc.xml new file mode 100644 index 0000000000..b134f20ecf --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.desc.xml @@ -0,0 +1,6 @@ + + CMIS Repository Info + /cmis-browser-app/repo + /cmis-browser-app/c/{conn}/repo + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.html.ftl new file mode 100644 index 0000000000..03ac298017 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.html.ftl @@ -0,0 +1,27 @@ +<#import "cmis.lib.html.ftl" as cmisLib/> + + + <@cmisLib.head>Repository: ${repoinfo.name} + +
+ <@cmisLib.connectionNavigation conn>Information + +
+ + + + + + + +
Name:${repoinfo.name}
Id:${repoinfo.id}
Product Name:${repoinfo.productName}
Product Version:${repoinfo.productVersion}
Vendor:${repoinfo.vendorName}
CMIS Version:${repoinfo.cmisVersionSupported}
+
+ + + + +
You may browse the ${rootFolder.name?html} folder + or query the repository.
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.js new file mode 100644 index 0000000000..c961e0bf2d --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/cmisbrowser/repo.get.js @@ -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; \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/content.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/content.get.desc.xml new file mode 100644 index 0000000000..269566ac2c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/content.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Content Stream + /cmis/content + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.desc.xml new file mode 100644 index 0000000000..0016b79680 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Create Folder Example + /cmissamples/createfolder + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.html.ftl new file mode 100644 index 0000000000..75b0c375ac --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.html.ftl @@ -0,0 +1,40 @@ + + + CMIS Create Folder + + + +

New Folder

+ <#if folder??> + + + + + + + + +
Name:${folder.name}
Path:${folder.path}
Id:${folder.id}
Type:${folder.type.id}
Created by:${folder.createdBy}
Creation date:${folder.creationDate.time?datetime}
+ + <#else> + +
+ + + + + + + + + + + + + +
Name:
Path:
+
+ + + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.js new file mode 100644 index 0000000000..5bfca14b71 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscreatefolder.get.js @@ -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) +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.desc.xml new file mode 100644 index 0000000000..6018dcd26c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Current Connection + /cmissamples/current + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.html.ftl new file mode 100644 index 0000000000..4f6a7ad82e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.html.ftl @@ -0,0 +1,55 @@ + + + CMIS Connection + + + +

Connection

+ + + +
Is default connection:${connection.default?string}
Is shared connection:${connection.shared?string}
+ +

Repository Info

+ + + + + + + +
Id:${cmisSession.repositoryInfo.id?html}
Name:${cmisSession.repositoryInfo.name?html}
Description:${cmisSession.repositoryInfo.description?html}
Vendor:${cmisSession.repositoryInfo.vendorName?html}
Product name:${cmisSession.repositoryInfo.productName?html}
Product version:${cmisSession.repositoryInfo.productVersion?html}
+ +

Root folder

+ Root folder Id: ${cmisSession.rootFolder.id?html}

+ + + + + <#list rootFolderChildren as obj> + + + + + + +
Name + Id + Type +
${obj.name?html}${obj.id?html}${obj.type.id?html}
+ +

Base Types

+ + + + <#list baseTypes as bt> + + + + + +
Name + Id +
${bt.displayName?html}${bt.id?html}
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.js new file mode 100644 index 0000000000..a6dcbc7436 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmiscurrent.get.js @@ -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(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.desc.xml new file mode 100644 index 0000000000..a5f0545752 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Browser + /cmissamples/browser + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.html.ftl new file mode 100644 index 0000000000..42865f2557 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.html.ftl @@ -0,0 +1,51 @@ + + + ${folder.name} - CMIS Browser + + + +
+ <#if !folder.rootFolder>UP | ${folder.path?html!""} +
+ + + <#list children as child> + + + <#if child.baseType.id == "cmis:folder"> + + + + + <#else> + + + + + + + + +
+ + + ${child.name?html}
+ modified ${child.lastModificationDate.time?datetime} by ${child.lastModifiedBy?html} +
+ <#assign contentUrl = "${url.serviceContext}/cmis/content?id=${child.id?url}&conn=${connection.id?url}"> + + <#if child.renditions?? && (child.renditions?size > 0)> + <#assign streamid = child.renditions?first.streamId> + + <#if streamid??> + + <#else> + + + + + ${child.name?html} (${child.versionLabel!""})
+ modified ${child.lastModificationDate.time?datetime} by ${child.lastModifiedBy?html}<#if (child.contentStreamLength > -1)> / ${(child.contentStreamLength/1000)?int} KB +
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.js new file mode 100644 index 0000000000..f65c3236e4 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdocbrowser.get.js @@ -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(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.desc.xml new file mode 100644 index 0000000000..c37cd203d4 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Document Download + /cmissamples/download + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.html.ftl new file mode 100644 index 0000000000..1c9e82d730 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.html.ftl @@ -0,0 +1,42 @@ + + + CMIS Document Download + + + +

Document

+ + <#if doc??> + + + + + + + + + + + + + +
Name:${doc.name?html}
Id:${doc.id?html}
Type:${doc.type.displayName?html} (${doc.type.id?html})
Created by:${doc.createdBy?html}
Creation date:${doc.creationDate.time?datetime}
Last modified by:${doc.lastModifiedBy?html}
Last modification date:${doc.lastModificationDate.time?datetime}
Size:${doc.contentStreamLength?c} bytes
MIME type:${doc.contentStreamMimeType?html}
Version label:${doc.versionLabel!""?html}
download
+ + <#else> + +
+ + + + + + + + + +
Path:
+
+ + + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.js new file mode 100644 index 0000000000..6fe86fc55c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisdownload.get.js @@ -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 + } +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.desc.xml deleted file mode 100644 index e1e56a5808..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.desc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - Local test - /cmissample/local - user - \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.html.ftl deleted file mode 100644 index 2d29d2b1c5..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.html.ftl +++ /dev/null @@ -1,49 +0,0 @@ - - - CMIS Connection - - - -

Repository Info

- - - - - - - -
Id:${cmisSession.repositoryInfo.id}
Name:${cmisSession.repositoryInfo.name}
Description:${cmisSession.repositoryInfo.description}
Vendor:${cmisSession.repositoryInfo.vendorName}
Product name:${cmisSession.repositoryInfo.productName}
Product version:${cmisSession.repositoryInfo.productVersion}
- -

Root folder

- Root folder Id: ${cmisSession.rootFolder.id}

- - - - - <#list rootFolderChildren as obj> - - - - - - -
Name - Id - Type -
${obj.name}${obj.id}${obj.type.id}
- -

Base Types

- - - - <#list baseTypes as bt> - - - - - -
Name - Id -
${bt.displayName}${bt.id}
- - diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.js deleted file mode 100644 index 9cb4aecdd2..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmislocal.get.js +++ /dev/null @@ -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(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.desc.xml new file mode 100644 index 0000000000..536d0e6a44 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Client Samples + /cmissamples + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.html.ftl new file mode 100644 index 0000000000..4120a83f8c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.html.ftl @@ -0,0 +1,83 @@ + + + CMIS Client Samples + + + +

CMIS Client Samples

+ + +

+ +
Current CMIS Connection
+ + + + + + + +
Id:${cmisSession.repositoryInfo.id?html}
Name:${cmisSession.repositoryInfo.name?html}
Description:${cmisSession.repositoryInfo.description?html}
Vendor:${cmisSession.repositoryInfo.vendorName?html}
Product name:${cmisSession.repositoryInfo.productName?html}
Product version:${cmisSession.repositoryInfo.productVersion?html}
+

+ +
Select CMIS Connection
+ + + + + + + + + + + + + +
Local Alfresco server: +
+ + +
+

+
Custom OpenCMIS configuration: +
+ +
+ + +
+

+
Preconfigured CMIS server: +
+ +
+ + + + +
Username:
Password:
Repository Id: (leave empty for the first repository)
+
+ + +
+

+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.js new file mode 100644 index 0000000000..ae8f5da0e1 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.get.js @@ -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() \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.desc.xml new file mode 100644 index 0000000000..536d0e6a44 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.desc.xml @@ -0,0 +1,5 @@ + + CMIS Client Samples + /cmissamples + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.html.ftl new file mode 100644 index 0000000000..08de0bb34f --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.html.ftl @@ -0,0 +1,61 @@ + + + CMIS Connection + + + +

Connection

+ + <#if error??> +

Error: ${error}

+ <#else> +

Established!

+ + +
back
+ +
+ +

Repository Info

+ + + + + + + +
Id:${cmisSession.repositoryInfo.id?html}
Name:${cmisSession.repositoryInfo.name?html}
Description:${cmisSession.repositoryInfo.description?html}
Vendor:${cmisSession.repositoryInfo.vendorName?html}
Product name:${cmisSession.repositoryInfo.productName?html}
Product version:${cmisSession.repositoryInfo.productVersion?html}
+ +

Root folder

+
Root folder Id: ${cmisSession.rootFolder.id?html}
+ + + + + <#list rootFolderChildren as obj> + + + + + + +
Name + Id + Type +
${obj.name?html}${obj.id?html}${obj.type.id?html}
+ +

Base Types

+ + + + <#list baseTypes as bt> + + + + + +
Name + Id +
${bt.displayName?html}${bt.id?html}
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.js new file mode 100644 index 0000000000..45abf09c89 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmissamples.post.js @@ -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(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.desc.xml index 33bf9c1f0e..87c25a39f5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.desc.xml @@ -1,4 +1,4 @@ - CMIS servers - /cmissample/servers + CMIS Servers + /cmissamples/servers \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.html.ftl index 4ad03b3335..8cc5f2d613 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.html.ftl @@ -14,12 +14,12 @@ <#list cmisServers as s> - ${s.name} - ${s.description} + ${s.name?html} + ${s.description?html} <#assign p = s.parameters> <#list p?keys as key> - ${key} = ${p[key]}
+ ${key?html} = ${p[key]?html}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.js index 766350eeb0..9cc61f0782 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisserver.get.js @@ -1,2 +1,2 @@ // get all configured CMIS servers -model.cmisServers = cmisclient.getServerDefinitions(); +model.cmisServers = cmis.getServerDefinitions(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.desc.xml new file mode 100644 index 0000000000..1c422b966b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.desc.xml @@ -0,0 +1,5 @@ + + CMIS Document Upload Form + /cmissamples/upload + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.html.ftl new file mode 100644 index 0000000000..2c1eb64c25 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.get.html.ftl @@ -0,0 +1,29 @@ + + + CMIS Upload Web Script Sample + + + +

Upload

+
+ + + + + + + + + + + + + + + + + +
File:
Name:
Path:
+
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.desc.xml new file mode 100644 index 0000000000..47266d317e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.desc.xml @@ -0,0 +1,5 @@ + + CMIS Document Upload + /cmissamples/upload + user + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.html.ftl new file mode 100644 index 0000000000..8d439f8599 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.html.ftl @@ -0,0 +1,18 @@ + + + Upload Web Script Sample + + + +

New Document

+ + + + + + + + +
Name:${doc.name?html}
Id:${doc.id?html}
Type:${doc.type.id?html}
Created by:${doc.createdBy?html}
Creation date:${doc.creationDate.time?datetime}
Size:${(doc.contentStreamLength/1024)?int} KB
MIME type:${doc.contentStreamMimeType?html}
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.js new file mode 100644 index 0000000000..2871447f08 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/client/sample/cmisupload.post.js @@ -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; + } +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/cmis.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/cmis.get.js index c5b967676b..b67bff96b1 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/cmis.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/cmis.get.js @@ -1,19 +1,19 @@ -model.cmisVersion = cmis.version; -model.cmisSpecTitle = cmis.specTitle; -model.defaultRootFolder = cmis.defaultRootFolder; -model.defaultRootFolderPath = cmis.defaultRootFolderPath; -model.querySupport = cmis.querySupport.label; -model.joinSupport = cmis.joinSupport.label; -model.pwcSearchable = cmis.pwcSearchable; -model.allVersionsSearchable = cmis.allVersionsSearchable; -model.aclCapability = cmis.aclCapability.label; -model.aclSupportedPermissions = cmis.aclSupportedPermissions.label; -model.aclPropagation = cmis.aclPropagation.label; -model.repositoryPermissions = cmis.repositoryPermissions; -model.permissionMappings = cmis.permissionMappings; -model.principalAnonymous = cmis.principalAnonymous; -model.principalAnyone = cmis.principalAnyone; -model.changeLogCapability = cmis.changeLogCapability.label; -model.lastChangeLogToken = cmis.lastChangeLogToken; -model.changesOnType = cmis.changesOnType; -model.changesIncomplete = cmis.changesIncomplete; +model.cmisVersion = cmisserver.version; +model.cmisSpecTitle = cmisserver.specTitle; +model.defaultRootFolder = cmisserver.defaultRootFolder; +model.defaultRootFolderPath = cmisserver.defaultRootFolderPath; +model.querySupport = cmisserver.querySupport.label; +model.joinSupport = cmisserver.joinSupport.label; +model.pwcSearchable = cmisserver.pwcSearchable; +model.allVersionsSearchable = cmisserver.allVersionsSearchable; +model.aclCapability = cmisserver.aclCapability.label; +model.aclSupportedPermissions = cmisserver.aclSupportedPermissions.label; +model.aclPropagation = cmisserver.aclPropagation.label; +model.repositoryPermissions = cmisserver.repositoryPermissions; +model.permissionMappings = cmisserver.permissionMappings; +model.principalAnonymous = cmisserver.principalAnonymous; +model.principalAnyone = cmisserver.principalAnyone; +model.changeLogCapability = cmisserver.changeLogCapability.label; +model.lastChangeLogToken = cmisserver.lastChangeLogToken; +model.changesOnType = cmisserver.changesOnType; +model.changesIncomplete = cmisserver.changesIncomplete; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/content.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/content.delete.js index dc291f2517..4a7202f841 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/content.delete.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/content.delete.js @@ -10,7 +10,7 @@ script: } var node = object.node; - cmis.deleteContentStream(node); + cmisserver.deleteContentStream(node); status.code = 204; // Success, but no response content status.redirect = true; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.js index 7989b37477..1daa4fec5c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/descendants.get.js @@ -10,8 +10,8 @@ script: model.node = object.node; // handle filters - model.types = args[cmis.ARG_TYPES] === null ? cmis.defaultTypesFilter : args[ARG_TYPES]; - if (!cmis.isValidTypesFilter(model.types)) + model.types = args[cmisserver.ARG_TYPES] === null ? cmisserver.defaultTypesFilter : args[ARG_TYPES]; + if (!cmisserver.isValidTypesFilter(model.types)) { status.code = 400; status.message = "Types filter '" + model.types + "' unknown"; @@ -20,29 +20,29 @@ script: } // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.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) { model.renditionFilter = "cmis:none"; } // depth - var depth = args[cmis.ARG_DEPTH]; + var depth = args[cmisserver.ARG_DEPTH]; model.depth = (depth === null) ? 1 : parseInt(depth); // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/index.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/index.get.js index ea06270d70..cd12a7534e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/index.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/index.get.js @@ -1,12 +1,12 @@ var tckRunner = Packages.org.apache.chemistry.tck.atompub.tools.TCKRunner(); model.tckTests = tckRunner.getTestNames(); model.tckOptions = tckRunner.getOptions(); -model.cmisVersion = cmis.version; -model.cmisSpecTitle = cmis.specTitle; -model.querySupport = cmis.querySupport.label; -model.joinSupport = cmis.joinSupport.label; -model.pwcSearchable = cmis.pwcSearchable; -model.allVersionsSearchable = cmis.allVersionsSearchable; -model.aclCapability = cmis.aclCapability.label; -model.aclSupportedPermissions = cmis.aclSupportedPermissions.label; -model.aclPropagation = cmis.aclPropagation.label; +model.cmisVersion = cmisserver.version; +model.cmisSpecTitle = cmisserver.specTitle; +model.querySupport = cmisserver.querySupport.label; +model.joinSupport = cmisserver.joinSupport.label; +model.pwcSearchable = cmisserver.pwcSearchable; +model.allVersionsSearchable = cmisserver.allVersionsSearchable; +model.aclCapability = cmisserver.aclCapability.label; +model.aclSupportedPermissions = cmisserver.aclSupportedPermissions.label; +model.aclPropagation = cmisserver.aclPropagation.label; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/item.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/item.delete.js index 3d535c101c..f3f3e002af 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/item.delete.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/item.delete.js @@ -11,7 +11,7 @@ script: var node = object.node; // 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.redirect = true; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/item.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/item.get.js index 9041bd0aec..b000d922b6 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/item.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/item.get.js @@ -10,35 +10,35 @@ script: model.node = object.node; // return version - var returnVersion = args[cmis.ARG_RETURN_VERSION]; + var returnVersion = args[cmisserver.ARG_RETURN_VERSION]; if (returnVersion === null || returnVersion.length == 0) { returnVersion = "this"; } - model.node = cmis.getReturnVersion(model.node, returnVersion); + model.node = cmisserver.getReturnVersion(model.node, returnVersion); // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null || model.filter == "") { model.filter = "*"; } // ACL - model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true"; + model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true"; // rendition filter - model.renditionFilter = args[cmis.ARG_RENDITION_FILTER]; + model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER]; if (model.renditionFilter === null || model.renditionFilter.length == 0) { model.renditionFilter = "cmis:none"; } // include allowable actions - model.includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true"; + model.includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true"; // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js index 8349013cc5..d4e5e9b8b8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/modify.lib.js @@ -13,7 +13,7 @@ function createNode(parent, entry, slug, versioningState) // locate type definition // 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) { status.code = 400; @@ -36,7 +36,7 @@ function createNode(parent, entry, slug, versioningState) } else if (baseType == POLICY_TYPE_ID) { - node = cmis.createPolicy(typeId, parent); + node = cmisserver.createPolicy(typeId, parent); } else { @@ -58,7 +58,7 @@ function createNode(parent, entry, slug, versioningState) // apply versioning state if (baseType == DOCUMENT_TYPE_ID && versioningState != null) { - node = cmis.applyVersioningState(node, versioningState); + node = cmisserver.applyVersioningState(node, versioningState); } // only return node if updated successfully @@ -91,7 +91,7 @@ function updateNode(node, entry, exclude, validator) var vals = new Object(); var exclude = (exclude == null) ? new Array() : exclude; exclude.push(PROP_BASE_TYPE_ID); - var typeDef = cmis.queryType(node); + var typeDef = cmisserver.queryType(node); // Apply the provided properties of the node type unpackProperties(node, typeDef, object == null ? null : object.properties, exclude, validator, vals); @@ -111,7 +111,7 @@ function updateNode(node, entry, exclude, validator) if (extension != null) { // 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 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) { // 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) { status.code = 400; @@ -299,7 +299,7 @@ function createAssociation(source, entry) // locate relationship type definition // 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) { status.setCode(400, "CMIS object type " + typeId + " not understood"); @@ -345,7 +345,7 @@ function createAssociation(source, entry) function applyPolicy(target, entry) { var object = entry.getExtension(atom.names.cmisra_object); - cmis.applyPolicy(object.objectId, target); + cmisserver.applyPolicy(object.objectId, target); return null; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/read.lib.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/read.lib.js index c128208e88..0856cad5f7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/read.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/lib/read.lib.js @@ -5,13 +5,13 @@ function getObjectFromUrl() { var ret = new Object(); - ret.ref = cmis.createObjectReferenceFromUrl(args, url.templateArgs); + ret.ref = cmisserver.createObjectReferenceFromUrl(args, url.templateArgs); if (ret.ref == null) { status.setCode(400, "Cannot determine object reference from URL"); return ret; } - ret.node = cmis.getNode(ret.ref); + ret.node = cmisserver.getNode(ret.ref); if (ret.node === null) { status.setCode(404, "Cannot find object for " + ret.ref.toString()); @@ -26,13 +26,13 @@ function getObjectFromUrl() function getObjectFromObjectId(objectId) { var ret = new Object(); - ret.ref = cmis.createObjectIdReference(objectId); + ret.ref = cmisserver.createObjectIdReference(objectId); if (ret.ref == null) { status.setCode(400, "Cannot create object id reference from " + objectId); return ret; } - ret.node = cmis.getNode(ret.ref); + ret.node = cmisserver.getNode(ret.ref); if (ret.node === null) { status.setCode(404, "Cannot find object for " + ret.ref.toString()); @@ -47,13 +47,13 @@ function getObjectFromObjectId(objectId) function getAssocFromUrl() { var ret = new Object(); - ret.ref = cmis.createRelationshipReferenceFromUrl(args, url.templateArgs); + ret.ref = cmisserver.createRelationshipReferenceFromUrl(args, url.templateArgs); if (ret.ref == null) { status.setCode(400, "Cannot determine association reference from URL"); return ret; } - ret.assoc = cmis.getAssociation(ret.ref); + ret.assoc = cmisserver.getAssociation(ret.ref); if (ret.assoc === null) { status.setCode(404, "Cannot find association for " + ret.ref.toString()); diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js index 0ba0cf2a57..4bb525e4e2 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/parent.get.js @@ -11,7 +11,7 @@ script: var node = object.node; // locate parent - if (node.id == cmis.defaultRootFolder.id) + if (node.id == cmisserver.defaultRootFolder.id) { status.code = 404; status.message = "Object " + object.ref + " parent not found"; @@ -28,18 +28,18 @@ script: model.node = node.parent; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.filter = "*"; } // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js index d34c5d1bf0..75f5133411 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/parents.get.js @@ -21,20 +21,20 @@ script: model.parents = parents; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.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) { model.renditionFilter = "cmis:none"; } // 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); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/policies.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/policies.get.js index 11b3617cf2..988e2b5cc5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/policies.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/policies.get.js @@ -12,7 +12,7 @@ script: model.node = object.node; // property filter - var filter = args[cmis.ARG_FILTER]; + var filter = args[cmisserver.ARG_FILTER]; if (filter === null) { filter = "*"; @@ -20,7 +20,7 @@ script: // retrieve policies 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.cursor = paged.cursor; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.delete.js index 855969fcc8..27d375ac32 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.delete.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.delete.js @@ -9,7 +9,7 @@ script: } var node = object.node; - cmis.cancelCheckOut(node); + cmisserver.cancelCheckOut(node); status.code = 204; // Success, but no response content status.redirect = true; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.get.js index a0ff01a9c4..35eb294e8c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.get.js @@ -10,35 +10,35 @@ script: model.node = object.node; // return version - var returnVersion = args[cmis.ARG_RETURN_VERSION]; + var returnVersion = args[cmisserver.ARG_RETURN_VERSION]; if (returnVersion === null || returnVersion.length == 0) { returnVersion = "this"; } - model.node = cmis.getReturnVersion(model.node, returnVersion); + model.node = cmisserver.getReturnVersion(model.node, returnVersion); // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null || model.filter == "") { model.filter = "*"; } // ACL - model.includeACL = args[cmis.ARG_INCLUDE_ACL] == "true"; + model.includeACL = args[cmisserver.ARG_INCLUDE_ACL] == "true"; // rendition filter - model.renditionFilter = args[cmis.ARG_RENDITION_FILTER]; + model.renditionFilter = args[cmisserver.ARG_RENDITION_FILTER]; if (model.renditionFilter === null || model.renditionFilter.length == 0) { model.renditionFilter = "cmis:none"; } // include allowable actions - model.includeAllowableActions = args[cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true"; + model.includeAllowableActions = args[cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS] == "true"; // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.patch.atom.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.patch.atom.js index 605e786a1d..2303201ec4 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.patch.atom.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.patch.atom.js @@ -8,7 +8,7 @@ script: var object = getObjectFromUrl(); 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) { @@ -27,9 +27,9 @@ script: // checkin if (model.checkin) { - var comment = args[cmis.ARG_CHECKIN_COMMENT]; - var major = args[cmis.ARG_MAJOR]; + var comment = args[cmisserver.ARG_CHECKIN_COMMENT]; + var major = args[cmisserver.ARG_MAJOR]; major = (major === null || major == "true") ? true : false; - model.node = cmis.checkIn(model.node, comment, major); + model.node = cmisserver.checkIn(model.node, comment, major); } } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.put.atom.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.put.atom.js index 72f22858ea..f9a4af424d 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.put.atom.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/pwc.put.atom.js @@ -8,7 +8,7 @@ script: var object = getObjectFromUrl(); 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) { @@ -27,9 +27,9 @@ script: // checkin if (model.checkin) { - var comment = args[cmis.ARG_CHECKIN_COMMENT]; - var major = args[cmis.ARG_MAJOR]; + var comment = args[cmisserver.ARG_CHECKIN_COMMENT]; + var major = args[cmisserver.ARG_MAJOR]; major = (major === null || major == "true") ? true : false; - model.node = cmis.checkIn(model.node, comment, major); + model.node = cmisserver.checkIn(model.node, comment, major); } } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js index 4ab05f8ca3..706c6eda08 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/queries.post.cmisquery.js @@ -64,7 +64,7 @@ script: var page = paging.createPageOrWindow(null, null, isNaN(skipCount) ? null : skipCount, isNaN(maxItems) ? null : maxItems); // perform query - var paged = cmis.query(model.statement, page); + var paged = cmisserver.query(model.statement, page); model.resultset = paged.result; model.cursor = paged.cursor; @@ -72,12 +72,12 @@ script: // construct query uri model.queryUri = "/cmis/query"; - model.queryArgs = cmis.ARG_QUERY_STATEMENT + "=" + model.statement; - if (model.includeAllowableActions) model.queryArgs += "&" + cmis.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=" + model.includeAllowableActions; - if (model.includeRelationships != "none") model.queryArgs += "&" + cmis.ARG_INCLUDE_RELATIONSHIPS + "=" + model.includeRelationships; - if (model.renditionFilter != "cmis:none") model.queryArgs += "&" + cmis.ARG_RENDITION_FILTER + "=" + model.renditionFilter; - model.queryArgs += "&" + cmis.ARG_SKIP_COUNT + "=" + page.number; - model.queryArgs += "&" + cmis.ARG_MAX_ITEMS + "=" + page.size; + model.queryArgs = cmisserver.ARG_QUERY_STATEMENT + "=" + model.statement; + if (model.includeAllowableActions) model.queryArgs += "&" + cmisserver.ARG_INCLUDE_ALLOWABLE_ACTIONS + "=" + model.includeAllowableActions; + if (model.includeRelationships != "none") model.queryArgs += "&" + cmisserver.ARG_INCLUDE_RELATIONSHIPS + "=" + model.includeRelationships; + if (model.renditionFilter != "cmis:none") model.queryArgs += "&" + cmisserver.ARG_RENDITION_FILTER + "=" + model.renditionFilter; + model.queryArgs += "&" + cmisserver.ARG_SKIP_COUNT + "=" + page.number; + model.queryArgs += "&" + cmisserver.ARG_MAX_ITEMS + "=" + page.size; // TODO: set Content-Location status.code = 201; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js index 9930825de5..b10b1a2908 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/query.get.js @@ -27,11 +27,11 @@ script: } // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; @@ -39,7 +39,7 @@ script: // perform query var page = paging.createPageOrWindow(args); - var paged = cmis.query(model.statement, page); + var paged = cmisserver.query(model.statement, page); model.resultset = paged.result; model.cursor = paged.cursor; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.delete.js index 5acf246a28..6c10594883 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.delete.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.delete.js @@ -10,7 +10,7 @@ script: } var assoc = rel.assoc; - cmis.deleteObject(assoc); + cmisserver.deleteObject(assoc); status.code = 204; // Success, but no response content status.redirect = true; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.get.js index 83f1ac977e..44b6222b49 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationship.get.js @@ -12,13 +12,13 @@ script: model.assoc = rel.assoc; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.filter = "*"; } // 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); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationships.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationships.get.js index 1af0e4bb1a..e1425753fb 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/relationships.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/relationships.get.js @@ -12,17 +12,17 @@ script: model.node = object.node; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.filter = "*"; } // relationship type - var relType = args[cmis.ARG_RELATIONSHIP_TYPE]; + var relType = args[cmisserver.ARG_RELATIONSHIP_TYPE]; if (relType != null) { - model.relTypeDef = cmis.queryType(relType); + model.relTypeDef = cmisserver.queryType(relType); if (model.relTypeDef === null) { status.setCode(400, "Relationship type " + relType + " unknown"); @@ -36,10 +36,10 @@ script: } // 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 - var direction = args[cmis.ARG_DIRECTION]; + var direction = args[cmisserver.ARG_DIRECTION]; if (direction !== null && !CMISRelationshipDirectionEnum.FACTORY.validLabel(direction)) { status.setCode(400, "Direction " + direction + " unknown"); @@ -48,11 +48,11 @@ script: model.direction = CMISRelationshipDirectionEnum.FACTORY.toEnum(direction); // 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 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.cursor = paged.cursor; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.delete.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.delete.js index 6421ca416a..a49ec234eb 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.delete.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.delete.js @@ -11,7 +11,7 @@ script: var node = object.node; // unfileObjects - var unfileObjects = args[cmis.ARG_UNFILE_OBJECTS]; + var unfileObjects = args[cmisserver.ARG_UNFILE_OBJECTS]; if (unfileObjects === null || unfileObjects.length == 0) { unfileObjects = "delete"; @@ -26,8 +26,8 @@ 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! - cmis.deleteTree(node, status, continueOnFailure, unfileObjects != "delete", false); + cmisserver.deleteTree(node, status, continueOnFailure, unfileObjects != "delete", false); } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.js index c19b3ef204..f7568672c4 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/tree.get.js @@ -19,29 +19,29 @@ script: } // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.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) { model.renditionFilter = "cmis:none"; } // depth - var depth = args[cmis.ARG_DEPTH]; + var depth = args[cmisserver.ARG_DEPTH]; model.depth = (depth === null) ? 1 : parseInt(depth); // 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); // include relationships - model.includeRelationships = args[cmis.ARG_INCLUDE_RELATIONSHIPS]; + model.includeRelationships = args[cmisserver.ARG_INCLUDE_RELATIONSHIPS]; if (model.includeRelationships == null || model.includeRelationships.length == 0) { model.includeRelationships = "none"; diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/type.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/type.get.js index 65662fc6a3..2c71fc7734 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/type.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/type.get.js @@ -2,7 +2,7 @@ script: { // query type var typeId = url.templateArgs.typeId; - model.typedef = cmis.queryType(typeId); + model.typedef = cmisserver.queryType(typeId); if (model.typedef === null) { status.code = 404; @@ -12,6 +12,6 @@ script: } // 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; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/typechildren.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/typechildren.get.js index 050858c13f..2719a29ba0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/typechildren.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/typechildren.get.js @@ -1,15 +1,15 @@ script: { var page = paging.createPageOrWindow(args); - var typeId = args[cmis.ARG_TYPE_ID]; + var typeId = args[cmisserver.ARG_TYPE_ID]; if (typeId === null) { - typeId = url.templateArgs[cmis.ARG_TYPE_ID]; + typeId = url.templateArgs[cmisserver.ARG_TYPE_ID]; } if (typeId === null) { // query for base types - var paged = cmis.queryTypeChildren(null, page); + var paged = cmisserver.queryTypeChildren(null, page); model.results = paged.results; model.cursor = paged.cursor; model.typedef = null; @@ -17,7 +17,7 @@ script: else { // query a specific type and its children - var typedef = cmis.queryType(typeId); + var typedef = cmisserver.queryType(typeId); if (typedef === null) { status.code = 404; @@ -25,13 +25,13 @@ script: status.redirect = true; break script; } - var paged = cmis.queryTypeChildren(typedef, page); + var paged = cmisserver.queryTypeChildren(typedef, page); model.results = paged.results; model.cursor = paged.cursor; model.typedef = typedef; } // 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; } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/typedescendants.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/typedescendants.get.js index da1cffe9cd..58c74fea22 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/typedescendants.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/typedescendants.get.js @@ -1,22 +1,22 @@ script: { // extract type - var typeId = args[cmis.ARG_TYPE_ID]; + var typeId = args[cmisserver.ARG_TYPE_ID]; if (typeId === null) { - typeId = url.templateArgs[cmis.ARG_TYPE_ID]; + typeId = url.templateArgs[cmisserver.ARG_TYPE_ID]; } // descend from root if (typeId === null) { - var paged = cmis.queryTypeChildren(null, paging.createUnlimitedPage()); + var paged = cmisserver.queryTypeChildren(null, paging.createUnlimitedPage()); model.basetypes = paged.results; } else { // query a specific type - var typedef = cmis.queryType(typeId); + var typedef = cmisserver.queryType(typeId); if (typedef === null) { status.code = 404; @@ -28,7 +28,7 @@ script: } // depth - var depth = args[cmis.ARG_DEPTH]; + var depth = args[cmisserver.ARG_DEPTH]; if (depth == 0) { status.code = 500; @@ -39,6 +39,6 @@ script: model.depth = (depth === null) ? -1 : parseInt(depth); // 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; } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/cmis/versions.get.js b/config/alfresco/templates/webscripts/org/alfresco/cmis/versions.get.js index e1b58935d3..11e2dd5f67 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/cmis/versions.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/cmis/versions.get.js @@ -12,12 +12,12 @@ script: model.node = object.node; // property filter - model.filter = args[cmis.ARG_FILTER]; + model.filter = args[cmisserver.ARG_FILTER]; if (model.filter === null) { model.filter = "*"; } // retrieve versions - model.nodes = cmis.getAllVersions(model.node); + model.nodes = cmisserver.getAllVersions(model.node); } diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 2bc7b340a4..8a5b5458fd 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -11,8 +11,10 @@ classpath:alfresco/web-scripts-config.xml + classpath:alfresco/web-scripts-cmis-config.xml classpath:alfresco/extension/web-api-config-custom.xml classpath:alfresco/extension/web-scripts-config-custom.xml + classpath:alfresco/extension/web-scripts-cmis-config.xml @@ -142,7 +144,7 @@ - + @@ -313,8 +315,8 @@ - - cmis + + cmisserver @@ -369,42 +371,20 @@ - - - - - - - - - - - - - + + - diff --git a/config/alfresco/web-scripts-cmis-config.xml b/config/alfresco/web-scripts-cmis-config.xml new file mode 100644 index 0000000000..cde0862e5d --- /dev/null +++ b/config/alfresco/web-scripts-cmis-config.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/cmis/client/AbstractCMISConnectionManagerImpl.java b/source/java/org/alfresco/repo/cmis/client/AbstractCMISConnectionManagerImpl.java index cd3151773f..34eef429b8 100644 --- a/source/java/org/alfresco/repo/cmis/client/AbstractCMISConnectionManagerImpl.java +++ b/source/java/org/alfresco/repo/cmis/client/AbstractCMISConnectionManagerImpl.java @@ -19,7 +19,6 @@ package org.alfresco.repo.cmis.client; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; 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.runtime.SessionFactoryImpl; 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_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 = '$'; + protected ConfigService configService; protected AuthenticationService authenticationService; - protected SessionFactory sessionFactory; + protected final SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); protected LinkedHashMap sharedConnections; protected LinkedHashMap userConnections; protected int userConnectionsCapacity = 1000; - protected int sharedConnectionsCapacity = 1000; + protected int sharedConnectionsCapacity = 100; protected Map 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) { @@ -70,28 +80,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio this.sharedConnectionsCapacity = sharedConnectionsCapacity; } - public void setServers(List> serverList) - { - servers = new HashMap(); - - for (Map serverData : serverList) - { - CMISServer server = createServerDefinition(serverData); - if (server != null) - { - servers.put(server.getName(), server); - } - } - } - - @Override - public void afterPropertiesSet() throws Exception + public void init() { lock.writeLock().lock(); try { - sessionFactory = SessionFactoryImpl.newInstance(); - + // create shared connection LRU cache sharedConnections = new LinkedHashMap(sharedConnectionsCapacity, (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(userConnectionsCapacity, (int) Math.ceil(userConnectionsCapacity / 0.75) + 1, true) { @@ -115,15 +110,33 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio 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(); + } } finally { lock.writeLock().unlock(); } } + // --- connections --- + @Override 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(); if (currentUser == null) { @@ -142,7 +155,7 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio throw new IllegalStateException("Connection id is already in use!"); } - connection = createConnection(server, userConnectionId); + connection = createConnection(server, userConnectionId, false); userConnections.put(userConnectionId, connection); } finally @@ -161,6 +174,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio @Override 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; lock.writeLock().lock(); @@ -171,9 +190,9 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio 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 { lock.writeLock().unlock(); @@ -182,23 +201,42 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio 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()); 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 Collection 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 getUserConnections() { String currentUser = authenticationService.getCurrentUserName(); if (currentUser == null) @@ -213,16 +251,17 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio 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 (currentUser.equals(conn.getId().substring(idx + 1))) + if (currentUser.equals(conn.getInternalId().substring(idx + 1))) { result.add(conn); } } } + Collections.sort(result); return Collections.unmodifiableList(result); } finally { @@ -230,43 +269,15 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio } } - public CMISConnection getUserConnections(String connectionId) - { - 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 getSharedConnections() + public List getSharedConnections() { lock.writeLock().lock(); try { - return Collections.unmodifiableCollection(sharedConnections.values()); - } finally - { - lock.writeLock().unlock(); - } - } + List result = new ArrayList(sharedConnections.values()); - public CMISConnection getSharedConnection(String connectionId) - { - lock.writeLock().lock(); - try - { - return sharedConnections.get(connectionId); + Collections.sort(result); + return Collections.unmodifiableList(result); } finally { lock.writeLock().unlock(); @@ -275,7 +286,7 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio public void removeConnection(CMISConnection connection) { - if (connection == null || connection.getId() == null) + if (connection == null || connection.getInternalId() == null) { return; } @@ -283,19 +294,12 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio lock.writeLock().lock(); try { - if (connection.isLocal()) + if (connection.isShared()) { - userConnections.remove(LOCAL_CONNECTION_ID); + sharedConnections.remove(connection.getInternalId()); } else { - int idx = connection.getId().indexOf(RESERVED_ID_CHAR); - if (idx == -1) - { - sharedConnections.remove(connection.getId()); - } else - { - userConnections.remove(connection.getId()); - } + userConnections.remove(connection.getInternalId()); } } finally { @@ -314,25 +318,23 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio } } - @Override - public Collection getServerDefinitions() + // --- servers --- + + public List getServerDefinitions() { - return servers == null ? null : servers.values(); + return servers == null ? null : Collections.unmodifiableList(new ArrayList(servers.values())); } - @Override public CMISServer getServerDefinition(String serverName) { return servers == null ? null : servers.get(serverName); } - @Override public CMISServer createServerDefinition(String serverName, Map parameters) { return new CMISServerImpl(serverName, null, parameters); } - @Override public CMISServer createServerDefinition(CMISServer server, String username, String password) { if (server == null) @@ -347,7 +349,6 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio return new CMISServerImpl(server.getName(), server.getDescription(), parameters); } - @Override public CMISServer createServerDefinition(CMISServer server, String username, String password, String repositoryId) { if (server == null) @@ -384,7 +385,6 @@ public abstract class AbstractCMISConnectionManagerImpl implements CMISConnectio return null; } - @Override public List getRepositories(CMISServer server) { if (server == null) diff --git a/source/java/org/alfresco/repo/cmis/client/CMISConnection.java b/source/java/org/alfresco/repo/cmis/client/CMISConnection.java index d533c4d9fe..464672ed58 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISConnection.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISConnection.java @@ -23,17 +23,24 @@ import org.apache.chemistry.opencmis.client.api.Session; /** * Represents a CMIS connection. */ -public interface CMISConnection +public interface CMISConnection extends Comparable { /** - * Gets connection id. + * Gets the connection id. * * @return connection id */ String getId(); /** - * Gets OpenCMIS Session. + * Gets the internal connection id. + * + * @return connection id + */ + String getInternalId(); + + /** + * Gets the OpenCMIS Session. * * @return OpenCMIS session */ @@ -54,9 +61,19 @@ public interface CMISConnection 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 diff --git a/source/java/org/alfresco/repo/cmis/client/CMISConnectionImpl.java b/source/java/org/alfresco/repo/cmis/client/CMISConnectionImpl.java index 58ff1c564b..42c1911a34 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISConnectionImpl.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISConnectionImpl.java @@ -19,19 +19,22 @@ package org.alfresco.repo.cmis.client; import org.apache.chemistry.opencmis.client.api.Session; +import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery; public class CMISConnectionImpl implements CMISConnection { private AbstractCMISConnectionManagerImpl connectionManager; private String id; + private String internalId; private Session session; private CMISServer server; private String username; - private boolean isLocal; + private boolean isDefault; + private boolean isShared; 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) { @@ -49,47 +52,75 @@ public class CMISConnectionImpl implements CMISConnection } 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.server = server; this.username = username; - this.isLocal = isLocal; + this.isDefault = isDefault; + this.isShared = isShared; } - @Override public String getId() { return id; } + public String getInternalId() + { + return internalId; + } + @Override public Session getSession() { return session; } - @Override public CMISServer getServer() { return server; } - @Override public String getUserName() { return username; } - @Override - public boolean isLocal() + public boolean isDefault() { - 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() { connectionManager.removeConnection(this); session = null; } + + public int compareTo(CMISConnection conn) + { + return id.compareTo(conn.getId()); + } } diff --git a/source/java/org/alfresco/repo/cmis/client/CMISConnectionManager.java b/source/java/org/alfresco/repo/cmis/client/CMISConnectionManager.java index 907d684786..be25377804 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISConnectionManager.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISConnectionManager.java @@ -18,7 +18,6 @@ */ package org.alfresco.repo.cmis.client; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -31,6 +30,12 @@ public interface CMISConnectionManager { // --- connections --- + /** + * Creates a new default connection that is only visible to the current + * user. + */ + CMISConnection createDefaultConnection(CMISServer server); + /** * Creates a new connection that is only visible to the current user. */ @@ -47,33 +52,27 @@ public interface CMISConnectionManager CMISConnection getConnection(); /** - * Returns all user connections. + * Returns a specific connection or null if the connection id + * is unknown. */ - Collection getUserConnections(); + CMISConnection getConnection(String connectionId); /** - * Returns a specific user connection or null if the connection - * id is unknown. + * Returns all user connections. */ - CMISConnection getUserConnections(String connectionId); + List getUserConnections(); /** * Returns all shared connections. */ - Collection getSharedConnections(); - - /** - * Returns a specific shared connection or null if the - * connection id is unknown. - */ - CMISConnection getSharedConnection(String connectionId); + List getSharedConnections(); // --- servers --- /** * Returns all configured server definitions. */ - Collection getServerDefinitions(); + List getServerDefinitions(); /** * Gets a server definitions by name. diff --git a/source/java/org/alfresco/repo/cmis/client/CMISContentStreamWebScript.java b/source/java/org/alfresco/repo/cmis/client/CMISContentStreamWebScript.java new file mode 100644 index 0000000000..2078c34dc4 --- /dev/null +++ b/source/java/org/alfresco/repo/cmis/client/CMISContentStreamWebScript.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.cmis.client; + +import java.io.IOException; + +import org.apache.chemistry.opencmis.client.api.CmisObject; +import org.apache.chemistry.opencmis.client.api.Document; +import org.apache.chemistry.opencmis.client.api.Session; +import org.apache.chemistry.opencmis.commons.data.ContentStream; +import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException; +import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException; +import org.springframework.extensions.webscripts.AbstractWebScript; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.WebScriptResponse; +import org.springframework.util.FileCopyUtils; + +/** + * WebScript for CMIS links. + */ +public class CMISContentStreamWebScript extends AbstractWebScript +{ + public static final String DOC_ID = "id"; + public static final String STREAM_ID = "stream"; + public static final String CONNECTION = "conn"; + + private CMISConnectionManager connectionManager; + + public void setConnectionManager(CMISConnectionManager connectionManager) + { + this.connectionManager = connectionManager; + } + + @Override + public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException + { + CMISConnection conn = null; + + String docId = req.getParameter(DOC_ID); + String streamId = req.getParameter(STREAM_ID); + + String connectionId = req.getParameter(CONNECTION); + + if (connectionId != null) + { + conn = connectionManager.getConnection(connectionId); + } else + { + conn = connectionManager.getConnection(); + } + + if (conn == null) + { + throw new WebScriptException(500, "Invalid connection!"); + } + + Session session = conn.getSession(); + + // get object + CmisObject object; + try + { + object = session.getObject(docId); + } catch (CmisBaseException e) + { + if (e instanceof CmisObjectNotFoundException) + { + throw new WebScriptException(404, "Object not found!", e); + } else + { + throw new WebScriptException(500, e.getMessage(), e); + } + } + + if (!(object instanceof Document)) + { + throw new WebScriptException(404, "Object is not a document!"); + } + + // get document content + Document document = (Document) object; + ContentStream stream = streamId == null ? document.getContentStream() : document.getContentStream(streamId); + + // stream content + if (stream.getMimeType() != null) + { + res.setContentType(stream.getMimeType()); + } + long length = stream.getLength(); + if (length != -1) + { + res.setHeader("Content-Length", Long.toString(length)); + } + FileCopyUtils.copy(stream.getStream(), res.getOutputStream()); + } +} diff --git a/source/java/org/alfresco/repo/cmis/client/CMISHelper.java b/source/java/org/alfresco/repo/cmis/client/CMISHelper.java new file mode 100644 index 0000000000..f7d0dec55e --- /dev/null +++ b/source/java/org/alfresco/repo/cmis/client/CMISHelper.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.cmis.client; + +import java.io.InputStream; +import java.math.BigInteger; + +import org.alfresco.repo.jscript.ScriptableHashMap; +import org.apache.chemistry.opencmis.client.api.CmisObject; +import org.apache.chemistry.opencmis.client.api.Document; +import org.apache.chemistry.opencmis.client.api.Folder; +import org.apache.chemistry.opencmis.client.api.Policy; +import org.apache.chemistry.opencmis.client.api.Relationship; +import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl; +import org.springframework.extensions.surf.util.InputStreamContent; + +public class CMISHelper +{ + /** + * Creates a properties map. + */ + public ScriptableHashMap createMap() + { + return new ScriptableHashMap(); + } + + /** + * Creates a ContentStream object. + */ + public ContentStreamImpl createContentStream(String filename, long length, String mimetype, InputStream stream) + { + return new ContentStreamImpl(filename, length < 0 ? null : BigInteger.valueOf(length), mimetype, stream); + } + + /** + * Creates a ContentStream object. + */ + public ContentStreamImpl createContentStream(String filename, InputStreamContent content) + { + if (content == null) + { + throw new IllegalArgumentException("No content!"); + } + + return createContentStream(filename, content.getSize(), content.getMimetype(), content.getInputStream()); + } + + public boolean isDocument(CmisObject object) + { + return (object instanceof Document); + } + + public boolean isFolder(CmisObject object) + { + return (object instanceof Folder); + } + + public boolean isPolicy(CmisObject object) + { + return (object instanceof Policy); + } + + public boolean isRelationship(CmisObject object) + { + return (object instanceof Relationship); + } +} diff --git a/source/java/org/alfresco/repo/cmis/client/CMISLocalConnectionManagerImpl.java b/source/java/org/alfresco/repo/cmis/client/CMISLocalConnectionManagerImpl.java index 3410fc77e6..d54a2f65e3 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISLocalConnectionManagerImpl.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISLocalConnectionManagerImpl.java @@ -21,6 +21,7 @@ package org.alfresco.repo.cmis.client; import java.util.HashMap; import java.util.Map; +import org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl; import org.alfresco.opencmis.AlfrescoLocalCmisServiceFactory; import org.alfresco.opencmis.CMISConnector; import org.apache.chemistry.opencmis.client.api.Session; @@ -40,6 +41,12 @@ public class CMISLocalConnectionManagerImpl extends AbstractCMISConnectionManage AlfrescoLocalCmisServiceFactory.setCmisConnector(connector); } + @Override + public CMISConnection createDefaultConnection(CMISServer server) + { + throw new IllegalStateException("Local connection cannot be changed!"); + } + /** * Creates a local connection. */ @@ -49,7 +56,7 @@ public class CMISLocalConnectionManagerImpl extends AbstractCMISConnectionManage lock.writeLock().lock(); try { - CMISConnection connection = getUserConnections(LOCAL_CONNECTION_ID); + CMISConnection connection = getConnection(DEFAULT_CONNECTION_ID); if (connection != null) { return connection; @@ -60,13 +67,14 @@ public class CMISLocalConnectionManagerImpl extends AbstractCMISConnectionManage Map parameters = new HashMap(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.LOCAL.value()); parameters.put(SessionParameter.LOCAL_FACTORY, AlfrescoLocalCmisServiceFactory.class.getName()); + parameters.put(SessionParameter.OBJECT_FACTORY_CLASS, AlfrescoObjectFactoryImpl.class.getName()); parameters.put(SessionParameter.USER, currentUser); - CMISServer server = createServerDefinition("local", parameters); + CMISServer server = createServerDefinition("default", parameters); Session session = createSession(server.getParameters()); - connection = new CMISConnectionImpl(this, LOCAL_CONNECTION_ID, session, server, currentUser, true); + String userConnectionId = createUserConnectionId(currentUser, DEFAULT_CONNECTION_ID); - String userConnectionId = createUserConnectionId(currentUser, LOCAL_CONNECTION_ID); + connection = new CMISConnectionImpl(this, userConnectionId, session, server, currentUser, true, false); userConnections.put(userConnectionId, connection); diff --git a/source/java/org/alfresco/repo/cmis/client/CMISRemoteConnectionManagerImpl.java b/source/java/org/alfresco/repo/cmis/client/CMISRemoteConnectionManagerImpl.java index 2a36854ba2..0fabfb419c 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISRemoteConnectionManagerImpl.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISRemoteConnectionManagerImpl.java @@ -18,21 +18,54 @@ */ package org.alfresco.repo.cmis.client; +import java.util.HashMap; import java.util.Map; +import org.apache.chemistry.opencmis.client.api.Session; +import org.apache.chemistry.opencmis.commons.SessionParameter; + /** * CMIS Connection manager with a remote default connection. */ public class CMISRemoteConnectionManagerImpl extends AbstractCMISConnectionManagerImpl implements CMISConnectionManager { - private CMISServer defaultServer; - - /** - * Sets the remote server details. - */ - public void setDefaultServer(Map defaultServerProperties) + @Override + public CMISConnection createDefaultConnection(CMISServer server) { - defaultServer = createServerDefinition(defaultServerProperties); + lock.writeLock().lock(); + try + { + CMISConnection connection = getConnection(); + if (connection != null) + { + throw new IllegalStateException("Connection id is already in use!"); + } + + if (server == null) + { + throw new IllegalStateException("Server definition must be set!"); + } + + String currentUser = authenticationService.getCurrentUserName(); + + if (!server.getParameters().containsKey(SessionParameter.USER)) + { + Map parameters = new HashMap(server.getParameters()); + parameters.put(SessionParameter.USER, currentUser); + server = createServerDefinition(server.getName(), parameters); + } + + String userConnectionId = createUserConnectionId(currentUser, DEFAULT_CONNECTION_ID); + Session session = createSession(server.getParameters()); + connection = new CMISConnectionImpl(this, userConnectionId, session, server, currentUser, true, false); + + userConnections.put(userConnectionId, connection); + + return connection; + } finally + { + lock.writeLock().unlock(); + } } /** @@ -41,28 +74,6 @@ public class CMISRemoteConnectionManagerImpl extends AbstractCMISConnectionManag @Override public CMISConnection getConnection() { - lock.writeLock().lock(); - try - { - CMISConnection connection = getUserConnections(LOCAL_CONNECTION_ID); - if (connection != null) - { - return connection; - } - - String currentUser = authenticationService.getCurrentUserName(); - - if (defaultServer == null) - { - throw new IllegalStateException("No default server defined!"); - } - - CMISServer server = createServerDefinition(defaultServer, currentUser, null); - - return createUserConnection(server, LOCAL_CONNECTION_ID); - } finally - { - lock.writeLock().unlock(); - } + return getConnection(DEFAULT_CONNECTION_ID); } } diff --git a/source/java/org/alfresco/repo/cmis/client/CMISServerImpl.java b/source/java/org/alfresco/repo/cmis/client/CMISServerImpl.java index 3cc91d7b6f..774d52a978 100644 --- a/source/java/org/alfresco/repo/cmis/client/CMISServerImpl.java +++ b/source/java/org/alfresco/repo/cmis/client/CMISServerImpl.java @@ -44,19 +44,16 @@ public class CMISServerImpl implements CMISServer this.parameters = new HashMap(parameters); } - @Override public String getName() { return name; } - @Override public String getDescription() { return description; } - @Override public Map getParameters() { return Collections.unmodifiableMap(parameters); diff --git a/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElement.java b/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElement.java new file mode 100644 index 0000000000..56f52c714b --- /dev/null +++ b/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElement.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.cmis.client; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.dom4j.Element; +import org.springframework.extensions.config.ConfigElement; +import org.springframework.extensions.config.element.ConfigElementAdapter; + +/** + * CMIS server configuration element. + */ +public class CMISServersConfigElement extends ConfigElementAdapter +{ + private static final long serialVersionUID = 1L; + private static final String CONFIG_ELEMENT_ID = "cmis-servers"; + + private final Map serverDefintions = new HashMap(); + + @SuppressWarnings("unchecked") + public CMISServersConfigElement(Element element) + { + super(CONFIG_ELEMENT_ID); + + for (Element childElement : ((List) element.elements("server"))) + { + Map parameters = new LinkedHashMap(); + String name = null; + String description = null; + + for (Element parameterElement : ((List) childElement.elements("parameter"))) + { + String key = parameterElement.attributeValue("key"); + String value = parameterElement.attributeValue("value"); + if (key != null && value != null) + { + if (key.equals("name")) + { + name = value; + } else if (key.equals("description")) + { + description = value; + } else + { + parameters.put(key, value); + } + } + } + + if (name != null) + { + serverDefintions.put(name, new CMISServerImpl(name, description, parameters)); + } + } + } + + @Override + public ConfigElement combine(ConfigElement configElement) + { + if (configElement instanceof CMISServersConfigElement) + { + serverDefintions.putAll(((CMISServersConfigElement) configElement).getServerDefinitions()); + } + + return this; + } + + public Map getServerDefinitions() + { + return serverDefintions; + } +} diff --git a/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElementReader.java b/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElementReader.java new file mode 100644 index 0000000000..1f3ff611e4 --- /dev/null +++ b/source/java/org/alfresco/repo/cmis/client/CMISServersConfigElementReader.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.cmis.client; + +import org.dom4j.Element; +import org.springframework.extensions.config.ConfigElement; +import org.springframework.extensions.config.xml.elementreader.ConfigElementReader; + +/** + * CMIS server configurations reader. + */ +public class CMISServersConfigElementReader implements ConfigElementReader +{ + @Override + public ConfigElement parse(Element element) + { + ConfigElement configElement = null; + if (element != null) + { + configElement = new CMISServersConfigElement(element); + } + + return configElement; + } +}