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>,#if>
+ #list>
+]
\ 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