From 1a3cb0cdb37024fd7ed9b0fb60be591a2a39513c Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Wed, 11 Mar 2009 11:32:30 +0000 Subject: [PATCH] Merged V3.1 to HEAD 13068: JAWS-456: Site REST API to retrieve collection of site details for specific site list - Implementation for new web script added - Unit test added - Documentation updated http://wiki.alfresco.com/wiki/3.0_REST_API#Site_Service 13122: Fix for Site scaling issue - a user who is a member of a large number of sites and at least one favoriate site would see slow response when viewing any page in Share. Added "Loading search results..." delayed Ajax wait pop-up when searching in Share Site Finder page. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13560 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repository/site/sites.query.post.desc.xml | 8 +++ .../repository/site/sites.query.post.json.ftl | 8 +++ .../repository/site/sites.query.post.json.js | 41 +++++++++++++ .../web/scripts/site/SiteServiceTest.java | 59 +++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.js diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.desc.xml new file mode 100644 index 0000000000..e7eb0a44ed --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.desc.xml @@ -0,0 +1,8 @@ + + SitesQuery + Queries the collection of sites. + /api/sites/query + + user + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.ftl new file mode 100644 index 0000000000..0748caf69e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.ftl @@ -0,0 +1,8 @@ +<#import "site.lib.ftl" as siteLib/> + +[ + <#list sites as site> + <@siteLib.siteJSON site=site/> + <#if site_has_next>, + +] \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.js new file mode 100644 index 0000000000..bf5b704bb7 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/site/sites.query.post.json.js @@ -0,0 +1,41 @@ +function main() +{ + var sites = null; + + // NOTE: + // This implementation is sufficient for the 3.1 requirement, but when site query is expanded + // it should be formalised in the underlying JS and JAVA API's. Currently it is very simplistic + // as the current use case is very limited. + if (json.has("shortName") == true) + { + var shortNameQuery = json.getJSONObject("shortName"); + + // Get the matching mode required (default is "exact") + var matchMode = shortNameQuery.get("match") + var isMembershipMode = (matchMode == "exact-membership"); + + // Get each short name and put the associated site in the list + if (shortNameQuery.has("values") == true) + { + var values = shortNameQuery.getJSONArray("values"); + var len = values.length(); + var username = person.properties.userName; + sites = new Array(len); + for (var index=0; index createdSites = new ArrayList(5); @@ -193,6 +196,62 @@ public class SiteServiceTest extends BaseWebScriptTest assertEquals(5, result.length()); } + /** + * https://issues.alfresco.com/jira/browse/JAWS-456 + */ + public void testQuerySites() throws Exception + { + // Generate the short names of the sites + String[] shortNames = new String[]{GUID.generate(), GUID.generate(), GUID.generate(), GUID.generate(), GUID.generate()}; + + // Create the sites + createSite("myPreset", shortNames[0], "myTitle", "myDescription", true, 200); + createSite("myPreset", shortNames[1], "myTitle", "myDescription", true, 200); + createSite("myPreset", shortNames[2], "myTitle", "myDescription", true, 200); + createSite("myPreset", shortNames[3], "myTitle", "myDescription", true, 200); + createSite("myPreset", shortNames[4], "myTitle", "myDescription", true, 200); + + // build query json + JSONObject shortNameQuery = new JSONObject(); + shortNameQuery.put("match", "exact"); + JSONArray valuesArray = new JSONArray(); + valuesArray.put(0, shortNames[0]); + valuesArray.put(1, shortNames[2]); + valuesArray.put(2, shortNames[4]); + valuesArray.put(3, "bobbins"); + shortNameQuery.put("values", valuesArray); + JSONObject query = new JSONObject(); + query.put("shortName", shortNameQuery); + + // execute site query + Response response = sendRequest(new PostRequest(URL_SITES_QUERY, query.toString(), "application/json"), 200); + JSONArray result = new JSONArray(response.getContentAsString()); + + // check we have the results we expect + assertEquals(3, result.length()); + Set resultSet = new HashSet(); + for (int i=0; i