diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.desc.xml index eb36df4480..f746e03cc8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.desc.xml @@ -2,9 +2,10 @@ PickerList Service to return metadata of child items in a parent space to display in the object finder. /api/forms/picker/{type}/{store_type}/{store_id}/{id}/children + /api/forms/picker/{type}/children + /api/forms/picker/{type}/{store_type}/{store_id}/{id}/siblings /api/forms/picker/{type}/{store_type}/{store_id}/{id}/doclib - /api/forms/picker/{type}/children user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.json.ftl deleted file mode 100644 index e556473201..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.json.ftl +++ /dev/null @@ -1,11 +0,0 @@ -{ - data: - { - <#if nodeRef?? > - nodeRef: "${nodeRef}" - <#else > - nodeRef: null - - } -} - diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.desc.xml similarity index 88% rename from config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.desc.xml rename to config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.desc.xml index 1d8be103fc..835aa5af6b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-location.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.desc.xml @@ -1,5 +1,5 @@ - Locate Node + Node Locator Locates a Node in the repository using the specified Node Location strategy. diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.json.ftl new file mode 100644 index 0000000000..696037bb78 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/nodelocator/node-locator.get.json.ftl @@ -0,0 +1,11 @@ +{ + "data": + { + <#if nodeRef?? > + "nodeRef": "${nodeRef}" + <#else > + "nodeRef": null + + } +} + diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.desc.xml new file mode 100644 index 0000000000..00acd29eaa --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.desc.xml @@ -0,0 +1,10 @@ + + Get ACL ChangeSets + Get the ACL ChangeSets from the given commit time. + /api/solr/aclchangesets?fromId={fromId?}&fromTime={fromTime?}&maxResults={maxResults?} + argument + admin + required + internal + SOLR + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.json.ftl new file mode 100644 index 0000000000..e2d5c69956 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/aclChangeSets.get.json.ftl @@ -0,0 +1,10 @@ +<#import "solr.lib.ftl" as solrLib/> +{ + "aclChangeSets" : + [ + <#list aclChangeSets as aclChangeSet> + <@solrLib.aclChangeSetJSON aclChangeSet=aclChangeSet/> + <#if aclChangeSet_has_next>, + + ] +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodeContent.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodeContent.get.desc.xml similarity index 92% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodeContent.get.desc.xml rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodeContent.get.desc.xml index b3ece26c60..ae51879b99 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodeContent.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodeContent.get.desc.xml @@ -1,9 +1,10 @@ - - Get node property content as text - Get the content for the node property as text. - /api/solr/textContent?nodeId={nodeId}&propertyQName={propertyQName?} - argument - admin - required - internal + + Get node property content as text + Get the content for the node property as text. + /api/solr/textContent?nodeId={nodeId}&propertyQName={propertyQName?} + argument + admin + required + internal + SOLR \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.desc.xml similarity index 91% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.desc.xml rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.desc.xml index 5290da85ef..79f91008d8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.desc.xml @@ -1,9 +1,10 @@ - - Get the nodes in the given transactions - Get the nodes updated/deleted in the given transactions. - /api/solr/nodes - argument - admin - required - internal + + Get the nodes in the given transactions + Get the nodes updated/deleted in the given transactions. + /api/solr/nodes + argument + admin + required + internal + SOLR \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.json.ftl similarity index 95% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.json.ftl rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.json.ftl index 8686e0ecfc..683e119542 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodes.post.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodes.post.json.ftl @@ -1,10 +1,10 @@ -<#import "solr.lib.ftl" as solrLib/> -{ - "nodes" : - [ - <#list nodes as node> - <@solrLib.nodeJSON node=node/> - <#if node_has_next>, - - ] +<#import "solr.lib.ftl" as solrLib/> +{ + "nodes" : + [ + <#list nodes as node> + <@solrLib.nodeJSON node=node/> + <#if node_has_next>, + + ] } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.desc.xml similarity index 91% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.desc.xml rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.desc.xml index ade11bebbd..14c75e7835 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.desc.xml @@ -1,9 +1,10 @@ - - Get the metadata for the specified nodes - Get the metadata for the specified nodes. - /api/solr/metadata - argument - admin - required - internal + + Get the metadata for the specified nodes + Get the metadata for the specified nodes. + /api/solr/metadata + argument + admin + required + internal + SOLR \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.json.ftl similarity index 96% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.json.ftl rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.json.ftl index 8c45102f11..f80aba7478 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getNodesMetaData.post.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/nodesMetaData.post.json.ftl @@ -1,9 +1,9 @@ -<#import "solr.lib.ftl" as solrLib/> -{ - "nodes" : - [ - <#list nodes as nodeMetaData> - <@solrLib.nodeMetaDataJSON nodeMetaData=nodeMetaData filter=filter/><#if nodeMetaData_has_next>, - - ] +<#import "solr.lib.ftl" as solrLib/> +{ + "nodes" : + [ + <#list nodes as nodeMetaData> + <@solrLib.nodeMetaDataJSON nodeMetaData=nodeMetaData filter=filter/><#if nodeMetaData_has_next>, + + ] } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/solr.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/solr.lib.ftl index 6ea6275fcf..d43c81d64a 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/solr.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/solr.lib.ftl @@ -1,3 +1,11 @@ +<#macro aclChangeSetJSON aclChangeSet> + { + "id": ${aclChangeSet.id?c}, + "commitTimeMs": ${aclChangeSet.commitTimeMs?c}, + "aclCount": ${aclChangeSet.aclCount?c} + } + + <#macro transactionJSON txn> { "id": ${txn.id?c}, diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.desc.xml similarity index 93% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.desc.xml rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.desc.xml index 5ddf6dd1ac..fbc1e981aa 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.desc.xml @@ -1,9 +1,10 @@ - - Get transactions - Get the transactions from the given commit time. - /api/solr/transactions?fromTxnId={fromTxnId?}&fromCommitTime={fromCommitTime?}&maxResults={maxResults?} - argument - admin - required - internal + + Get transactions + Get the transactions from the given commit time. + /api/solr/transactions?fromTxnId={fromTxnId?}&fromCommitTime={fromCommitTime?}&maxResults={maxResults?} + argument + admin + required + internal + SOLR \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.json.ftl similarity index 95% rename from config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.json.ftl rename to config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.json.ftl index 8adfc6aa3d..8c35b44dfd 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/getTransactions.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/transactions.get.json.ftl @@ -1,10 +1,10 @@ -<#import "solr.lib.ftl" as solrLib/> -{ - "transactions" : - [ - <#list transactions as txn> - <@solrLib.transactionJSON txn=txn/> - <#if txn_has_next>, - - ] +<#import "solr.lib.ftl" as solrLib/> +{ + "transactions" : + [ + <#list transactions as txn> + <@solrLib.transactionJSON txn=txn/> + <#if txn_has_next>, + + ] } \ No newline at end of file diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 93c1e9ee23..040a21811c 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1227,27 +1227,33 @@ - - - + + - @@ -1259,8 +1265,8 @@ - diff --git a/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationGet.java b/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorGet.java similarity index 93% rename from source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationGet.java rename to source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorGet.java index 4a59f93acc..827b00dc09 100644 --- a/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationGet.java +++ b/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorGet.java @@ -25,7 +25,7 @@ import java.util.Map; import javax.servlet.http.HttpServletResponse; -import org.alfresco.service.cmr.repository.NodeLocatorService; +import org.alfresco.repo.nodelocator.NodeLocatorService; import org.alfresco.service.cmr.repository.NodeRef; import org.springframework.extensions.surf.util.URLDecoder; import org.springframework.extensions.webscripts.DeclarativeWebScript; @@ -38,7 +38,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest; * @since 4.0 * */ -public class NodeLocationGet extends DeclarativeWebScript +public class NodeLocatorGet extends DeclarativeWebScript { private static final String NODE_ID = "node_id"; private static final String STORE_ID = "store_id"; diff --git a/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationWebScriptTest.java b/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorWebScriptTest.java similarity index 94% rename from source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationWebScriptTest.java rename to source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorWebScriptTest.java index a4bdaec29b..8751321058 100644 --- a/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocationWebScriptTest.java +++ b/source/java/org/alfresco/repo/web/scripts/nodelocator/NodeLocatorWebScriptTest.java @@ -21,13 +21,13 @@ package org.alfresco.repo.web.scripts.nodelocator; import org.alfresco.model.ContentModel; import org.alfresco.repo.model.Repository; -import org.alfresco.repo.node.locator.AncestorNodeLocator; -import org.alfresco.repo.node.locator.CompanyHomeNodeLocator; -import org.alfresco.repo.node.locator.DocLibNodeLocator; -import org.alfresco.repo.node.locator.SitesHomeNodeLocator; -import org.alfresco.repo.node.locator.UserHomeNodeLocator; -import org.alfresco.repo.node.locator.XPathNodeLocator; +import org.alfresco.repo.nodelocator.AncestorNodeLocator; +import org.alfresco.repo.nodelocator.CompanyHomeNodeLocator; +import org.alfresco.repo.nodelocator.SitesHomeNodeLocator; +import org.alfresco.repo.nodelocator.UserHomeNodeLocator; +import org.alfresco.repo.nodelocator.XPathNodeLocator; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.site.DocLibNodeLocator; import org.alfresco.repo.site.SiteServiceInternal; import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -51,7 +51,7 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response; * @since 4.0 * */ -public class NodeLocationWebScriptTest extends BaseWebScriptTest +public class NodeLocatorWebScriptTest extends BaseWebScriptTest { private static final String baseURL = "api/nodelocator/"; private SiteServiceInternal siteService; diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java b/source/java/org/alfresco/repo/web/scripts/solr/AclChangeSetsGet.java similarity index 61% rename from source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java rename to source/java/org/alfresco/repo/web/scripts/solr/AclChangeSetsGet.java index 3cb08d6a51..78f034a80c 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/AclChangeSetsGet.java @@ -1,74 +1,71 @@ -/* - * 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.web.scripts.solr; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.repo.domain.solr.SOLRDAO; -import org.alfresco.repo.domain.solr.Transaction; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptRequest; - -/** - * Support for SOLR: Track ACL Change Sets - * - * @since 4.0 - */ -public class GetAclChangeSets extends DeclarativeWebScript -{ - protected static final Log logger = LogFactory.getLog(GetAclChangeSets.class); - - private SOLRDAO solrDAO; - - /** - * @param solrDAO the SOLDAO to set - */ - public void setSolrDAO(SOLRDAO solrDAO) - { - this.solrDAO = solrDAO; - } - - protected Map executeImpl(WebScriptRequest req, Status status) - { - String minAclChangeSetIdParam = req.getParameter("minAclChangeSetId"); - String fromCommitTimeParam = req.getParameter("fromCommitTime"); - String maxResultsParam = req.getParameter("maxResults"); - - Long minAclChangeSetId = (minAclChangeSetIdParam == null ? null : Long.valueOf(minAclChangeSetIdParam)); - Long fromCommitTime = (fromCommitTimeParam == null ? null : Long.valueOf(fromCommitTimeParam)); - int maxResults = (maxResultsParam == null ? 0 : Integer.valueOf(maxResultsParam)); - - List transactions = solrDAO.getTransactions(minAclChangeSetId, fromCommitTime, maxResults); - - Map model = new HashMap(1, 1.0f); - model.put("transactions", transactions); - - if (logger.isDebugEnabled()) - { - logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); - } - - return model; - } -} +/* + * 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.web.scripts.solr; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.repo.solr.AclChangeSet; +import org.alfresco.repo.solr.SOLRTrackingComponent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Support for SOLR: Track ACL Change Sets + * + * @since 4.0 + */ +public class AclChangeSetsGet extends DeclarativeWebScript +{ + protected static final Log logger = LogFactory.getLog(AclChangeSetsGet.class); + + private SOLRTrackingComponent solrTrackingComponent; + + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) + { + this.solrTrackingComponent = solrTrackingComponent; + } + + protected Map executeImpl(WebScriptRequest req, Status status) + { + String fromIdParam = req.getParameter("fromId"); + String fromTimeParam = req.getParameter("fromTime"); + String maxResultsParam = req.getParameter("maxResults"); + + Long fromId = (fromIdParam == null ? null : Long.valueOf(fromIdParam)); + Long fromTime = (fromTimeParam == null ? null : Long.valueOf(fromTimeParam)); + int maxResults = (maxResultsParam == null ? 1024 : Integer.valueOf(maxResultsParam)); + + List changesets = solrTrackingComponent.getAclChangeSets(fromId, fromTime, maxResults); + + Map model = new HashMap(1, 1.0f); + model.put("aclChangeSets", changesets); + + if (logger.isDebugEnabled()) + { + logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); + } + + return model; + } +} diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java b/source/java/org/alfresco/repo/web/scripts/solr/NodeContentGet.java similarity index 95% rename from source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java rename to source/java/org/alfresco/repo/web/scripts/solr/NodeContentGet.java index 481a0fbf82..d6ef853935 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/NodeContentGet.java @@ -1,201 +1,201 @@ -/* - * 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.web.scripts.solr; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -import javax.servlet.http.HttpServletResponse; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.content.transform.ContentTransformer; -import org.alfresco.repo.domain.node.NodeDAO; -import org.alfresco.repo.web.scripts.content.StreamContent; -import org.alfresco.service.cmr.repository.ContentIOException; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; -import org.alfresco.util.Pair; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.extensions.webscripts.WebScriptException; -import org.springframework.extensions.webscripts.WebScriptRequest; -import org.springframework.extensions.webscripts.WebScriptResponse; - -/** - * A web service to return the text content (transformed if required) of a node's - * content property. - * - * @since 4.0 - */ -public class GetNodeContent extends StreamContent -{ - private static final String TRANSFORM_STATUS_HEADER = "X-Alfresco-transformStatus"; - private static final String TRANSFORM_EXCEPTION_HEADER = "X-Alfresco-transformException"; - - private static final Log logger = LogFactory.getLog(GetNodeContent.class); - - /** - * format definied by RFC 822, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3 - */ - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US); - - private NodeDAO nodeDAO; - private NodeService nodeService; - private ContentService contentService; - - public void setNodeDAO(NodeDAO nodeDAO) - { - this.nodeDAO = nodeDAO; - } - - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - public void setContentService(ContentService contentService) - { - this.contentService = contentService; - } - - /** - * @in - */ - public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException - { - ContentReader textReader = null; - Exception transformException = null; - - String nodeIDString = req.getParameter("nodeId"); - if(nodeIDString == null) - { - throw new WebScriptException("nodeID parameter is required for GetNodeContent"); - } - long nodeId = Long.valueOf(nodeIDString).longValue(); - - String propertyQName = req.getParameter("propertyQName"); - QName propertyName = null; - if(propertyQName == null) - { - propertyName = ContentModel.PROP_CONTENT; - } - else - { - propertyName = QName.createQName(propertyQName); - } - Pair pair = nodeDAO.getNodePair(nodeId); - if(pair == null) - { - throw new WebScriptException("Node id does not exist"); - } - NodeRef nodeRef = pair.getSecond(); - - // check If-Modified-Since header and set Last-Modified header as appropriate - Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED); - long modifiedSince = -1; - String modifiedSinceStr = req.getHeader("If-Modified-Since"); - if(modifiedSinceStr != null) - { - try - { - modifiedSince = dateFormat.parse(modifiedSinceStr).getTime(); - } - catch (Throwable e) - { - if (logger.isWarnEnabled()) - { - logger.warn("Browser sent badly-formatted If-Modified-Since header: " + modifiedSinceStr); - } - } - - if (modifiedSince > 0L) - { - // round the date to the ignore millisecond value which is not supplied by header - long modDate = (modified.getTime() / 1000L) * 1000L; - if (modDate <= modifiedSince) - { - res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - return; - } - } - } - - ContentReader reader = contentService.getReader(nodeRef, propertyName); - if(reader == null) - { - res.setStatus(HttpStatus.SC_NO_CONTENT); - return; - } - - // Perform transformation catering for mimetype AND encoding - ContentWriter writer = contentService.getTempWriter(); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); // Expect transformers to produce UTF-8 - - ContentTransformer transformer = contentService.getTransformer(reader.getMimetype(), MimetypeMap.MIMETYPE_TEXT_PLAIN); - if(transformer == null) - { - res.setHeader(TRANSFORM_STATUS_HEADER, "noTransform"); - res.setStatus(HttpStatus.SC_NO_CONTENT); - return; - } - - try - { - transformer.transform(reader, writer); - } - catch (ContentIOException e) - { - transformException = e; - } - - if(transformException == null) - { - // point the reader to the new-written content - textReader = writer.getReader(); - // Check that the reader is a view onto something concrete - if (textReader == null || !textReader.exists()) - { - transformException = new ContentIOException( - "The transformation did not write any content, yet: \n" - + " transformer: " + transformer + "\n" + " temp writer: " + writer); - } - } - - if(transformException != null) - { - res.setHeader(TRANSFORM_STATUS_HEADER, "transformFailed"); - res.setHeader(TRANSFORM_EXCEPTION_HEADER, transformException.getMessage()); - res.setStatus(HttpStatus.SC_NO_CONTENT); - } - else - { - res.setStatus(HttpStatus.SC_OK); - streamContentImpl(req, res, textReader, false, modified, String.valueOf(modified.getTime()), null); - } - } -} +/* + * 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.web.scripts.solr; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import javax.servlet.http.HttpServletResponse; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.content.transform.ContentTransformer; +import org.alfresco.repo.domain.node.NodeDAO; +import org.alfresco.repo.web.scripts.content.StreamContent; +import org.alfresco.service.cmr.repository.ContentIOException; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; +import org.springframework.extensions.webscripts.WebScriptResponse; + +/** + * A web service to return the text content (transformed if required) of a node's + * content property. + * + * @since 4.0 + */ +public class NodeContentGet extends StreamContent +{ + private static final String TRANSFORM_STATUS_HEADER = "X-Alfresco-transformStatus"; + private static final String TRANSFORM_EXCEPTION_HEADER = "X-Alfresco-transformException"; + + private static final Log logger = LogFactory.getLog(NodeContentGet.class); + + /** + * format definied by RFC 822, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3 + */ + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US); + + private NodeDAO nodeDAO; + private NodeService nodeService; + private ContentService contentService; + + public void setNodeDAO(NodeDAO nodeDAO) + { + this.nodeDAO = nodeDAO; + } + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public void setContentService(ContentService contentService) + { + this.contentService = contentService; + } + + /** + * @in + */ + public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException + { + ContentReader textReader = null; + Exception transformException = null; + + String nodeIDString = req.getParameter("nodeId"); + if(nodeIDString == null) + { + throw new WebScriptException("nodeID parameter is required for GetNodeContent"); + } + long nodeId = Long.valueOf(nodeIDString).longValue(); + + String propertyQName = req.getParameter("propertyQName"); + QName propertyName = null; + if(propertyQName == null) + { + propertyName = ContentModel.PROP_CONTENT; + } + else + { + propertyName = QName.createQName(propertyQName); + } + Pair pair = nodeDAO.getNodePair(nodeId); + if(pair == null) + { + throw new WebScriptException("Node id does not exist"); + } + NodeRef nodeRef = pair.getSecond(); + + // check If-Modified-Since header and set Last-Modified header as appropriate + Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED); + long modifiedSince = -1; + String modifiedSinceStr = req.getHeader("If-Modified-Since"); + if(modifiedSinceStr != null) + { + try + { + modifiedSince = dateFormat.parse(modifiedSinceStr).getTime(); + } + catch (Throwable e) + { + if (logger.isWarnEnabled()) + { + logger.warn("Browser sent badly-formatted If-Modified-Since header: " + modifiedSinceStr); + } + } + + if (modifiedSince > 0L) + { + // round the date to the ignore millisecond value which is not supplied by header + long modDate = (modified.getTime() / 1000L) * 1000L; + if (modDate <= modifiedSince) + { + res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + return; + } + } + } + + ContentReader reader = contentService.getReader(nodeRef, propertyName); + if(reader == null) + { + res.setStatus(HttpStatus.SC_NO_CONTENT); + return; + } + + // Perform transformation catering for mimetype AND encoding + ContentWriter writer = contentService.getTempWriter(); + writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); + writer.setEncoding("UTF-8"); // Expect transformers to produce UTF-8 + + ContentTransformer transformer = contentService.getTransformer(reader.getMimetype(), MimetypeMap.MIMETYPE_TEXT_PLAIN); + if(transformer == null) + { + res.setHeader(TRANSFORM_STATUS_HEADER, "noTransform"); + res.setStatus(HttpStatus.SC_NO_CONTENT); + return; + } + + try + { + transformer.transform(reader, writer); + } + catch (ContentIOException e) + { + transformException = e; + } + + if(transformException == null) + { + // point the reader to the new-written content + textReader = writer.getReader(); + // Check that the reader is a view onto something concrete + if (textReader == null || !textReader.exists()) + { + transformException = new ContentIOException( + "The transformation did not write any content, yet: \n" + + " transformer: " + transformer + "\n" + " temp writer: " + writer); + } + } + + if(transformException != null) + { + res.setHeader(TRANSFORM_STATUS_HEADER, "transformFailed"); + res.setHeader(TRANSFORM_EXCEPTION_HEADER, transformException.getMessage()); + res.setStatus(HttpStatus.SC_NO_CONTENT); + } + else + { + res.setStatus(HttpStatus.SC_OK); + streamContentImpl(req, res, textReader, false, modified, String.valueOf(modified.getTime()), null); + } + } +} diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java b/source/java/org/alfresco/repo/web/scripts/solr/NodesGet.java similarity index 95% rename from source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java rename to source/java/org/alfresco/repo/web/scripts/solr/NodesGet.java index fccb7f92da..8f3398a51d 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/NodesGet.java @@ -1,208 +1,208 @@ -/* - * 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.web.scripts.solr; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.alfresco.repo.domain.node.Node; -import org.alfresco.repo.solr.NodeParameters; -import org.alfresco.repo.solr.SOLRTrackingComponent; -import org.alfresco.repo.solr.SOLRTrackingComponent.NodeQueryCallback; -import org.alfresco.service.namespace.QName; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.springframework.extensions.surf.util.Content; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptException; -import org.springframework.extensions.webscripts.WebScriptRequest; - -/** - * Support for SOLR: Get a list of nodes in the given transactions. - *

- * Supports fromNodeId, toNodeId, count (all optional) to control the number of nodes returned
- * e.g. (null, null, 1000) will return at most 1000 nodes starting from the first node in the first transaction.
- * e.g. (1234, null, 1000) will return at most 1000 nodes starting from the node id 1234.
- * - * @since 4.0 - */ -public class GetNodes extends DeclarativeWebScript -{ - protected static final Log logger = LogFactory.getLog(GetNodes.class); - - private SOLRTrackingComponent solrTrackingComponent; - - public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) - { - this.solrTrackingComponent = solrTrackingComponent; - } - - @Override - protected Map executeImpl(WebScriptRequest req, Status status) - { - try - { - Content content = req.getContent(); - if(content == null) - { - throw new WebScriptException("Failed to convert request to String"); - } - JSONObject o = new JSONObject(content.getContent()); - - JSONArray aTxnIds = o.has("txnIds") ? o.getJSONArray("txnIds") : null; - Long fromTxnId = o.has("fromTxnId") ? o.getLong("fromTxnId") : null; - Long toTxnId = o.has("toTxnId") ? o.getLong("toTxnId") : null; - - Long fromNodeId = o.has("fromNodeId") ? o.getLong("fromNodeId") : null; - Long toNodeId = o.has("toNodeId") ? o.getLong("toNodeId") : null; - - Set excludeAspects = null; - if(o.has("excludeAspects")) - { - JSONArray aExcludeAspects = o.getJSONArray("excludeAspects"); - excludeAspects = new HashSet(aExcludeAspects.length()); - for(int i = 0; i < aExcludeAspects.length(); i++) - { - excludeAspects.add(QName.createQName(aExcludeAspects.getString(i).trim())); - } - } - - Set includeAspects = null; - if(o.has("includeAspects")) - { - JSONArray aIncludeAspects = o.getJSONArray("includeAspects"); - includeAspects = new HashSet(aIncludeAspects.length()); - for(int i = 0; i < aIncludeAspects.length(); i++) - { - includeAspects.add(QName.createQName(aIncludeAspects.getString(i).trim())); - } - } - - Set excludeNodeTypes = null; - if(o.has("excludeNodeTypes")) - { - JSONArray aExcludeNodeTypes = o.getJSONArray("excludeNodeTypes"); - excludeNodeTypes = new HashSet(aExcludeNodeTypes.length()); - for(int i = 0; i < aExcludeNodeTypes.length(); i++) - { - excludeNodeTypes.add(QName.createQName(aExcludeNodeTypes.getString(i).trim())); - } - } - - Set includeNodeTypes = null; - if(o.has("includeNodeTypes")) - { - JSONArray aIncludeNodeTypes = o.getJSONArray("includeNodeTypes"); - includeNodeTypes = new HashSet(aIncludeNodeTypes.length()); - for(int i = 0; i < aIncludeNodeTypes.length(); i++) - { - includeNodeTypes.add(QName.createQName(aIncludeNodeTypes.getString(i).trim())); - } - } - - // 0 or Integer.MAX_VALUE => ignore - int maxResults = o.has("maxResults") ? o.getInt("maxResults") : 0; - - String storeProtocol = o.has("storeProtocol") ? o.getString("storeProtocol") : null; - String storeIdentifier = o.has("storeIdentifier") ? o.getString("storeIdentifier") : null; - - List txnIds = null; - if(aTxnIds != null) - { - txnIds = new ArrayList(aTxnIds.length()); - for(int i = 0; i < aTxnIds.length(); i++) - { - txnIds.add(aTxnIds.getLong(i)); - } - } - - WebNodeQueryCallback nodeQueryCallback = new WebNodeQueryCallback(maxResults); - NodeParameters nodeParameters = new NodeParameters(); - nodeParameters.setTransactionIds(txnIds); - nodeParameters.setFromTxnId(fromTxnId); - nodeParameters.setToTxnId(toTxnId); - nodeParameters.setFromNodeId(fromNodeId); - nodeParameters.setToNodeId(toNodeId); - nodeParameters.setExcludeAspects(excludeAspects); - nodeParameters.setIncludeAspects(includeAspects); - nodeParameters.setExcludeNodeTypes(excludeNodeTypes); - nodeParameters.setIncludeNodeTypes(includeNodeTypes); - nodeParameters.setStoreProtocol(storeProtocol); - nodeParameters.setStoreIdentifier(storeIdentifier); - nodeParameters.setMaxResults(maxResults); - solrTrackingComponent.getNodes(nodeParameters, nodeQueryCallback); - - Map model = new HashMap(1, 1.0f); - List nodes = nodeQueryCallback.getNodes(); - model.put("nodes", nodes); - - if (logger.isDebugEnabled()) - { - logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); - } - - return model; - } - catch(IOException e) - { - throw new WebScriptException("IO exception parsing request", e); - } - catch(JSONException e) - { - throw new WebScriptException("Invalid JSON", e); - } - } - - /** - * Callback for DAO get nodes query - * - */ - private static class WebNodeQueryCallback implements NodeQueryCallback - { - private ArrayList nodes; - - public WebNodeQueryCallback(int count) { - super(); - nodes = new ArrayList(count == 0 || count == Integer.MAX_VALUE ? 100 : count); - } - - @Override - public boolean handleNode(Node node) { - nodes.add(node); - - // continue - get next node - return true; - } - - public List getNodes() - { - return nodes; - } - } - +/* + * 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.web.scripts.solr; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.domain.node.Node; +import org.alfresco.repo.solr.NodeParameters; +import org.alfresco.repo.solr.SOLRTrackingComponent; +import org.alfresco.repo.solr.SOLRTrackingComponent.NodeQueryCallback; +import org.alfresco.service.namespace.QName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.extensions.surf.util.Content; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Support for SOLR: Get a list of nodes in the given transactions. + *

+ * Supports fromNodeId, toNodeId, count (all optional) to control the number of nodes returned
+ * e.g. (null, null, 1000) will return at most 1000 nodes starting from the first node in the first transaction.
+ * e.g. (1234, null, 1000) will return at most 1000 nodes starting from the node id 1234.
+ * + * @since 4.0 + */ +public class NodesGet extends DeclarativeWebScript +{ + protected static final Log logger = LogFactory.getLog(NodesGet.class); + + private SOLRTrackingComponent solrTrackingComponent; + + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) + { + this.solrTrackingComponent = solrTrackingComponent; + } + + @Override + protected Map executeImpl(WebScriptRequest req, Status status) + { + try + { + Content content = req.getContent(); + if(content == null) + { + throw new WebScriptException("Failed to convert request to String"); + } + JSONObject o = new JSONObject(content.getContent()); + + JSONArray aTxnIds = o.has("txnIds") ? o.getJSONArray("txnIds") : null; + Long fromTxnId = o.has("fromTxnId") ? o.getLong("fromTxnId") : null; + Long toTxnId = o.has("toTxnId") ? o.getLong("toTxnId") : null; + + Long fromNodeId = o.has("fromNodeId") ? o.getLong("fromNodeId") : null; + Long toNodeId = o.has("toNodeId") ? o.getLong("toNodeId") : null; + + Set excludeAspects = null; + if(o.has("excludeAspects")) + { + JSONArray aExcludeAspects = o.getJSONArray("excludeAspects"); + excludeAspects = new HashSet(aExcludeAspects.length()); + for(int i = 0; i < aExcludeAspects.length(); i++) + { + excludeAspects.add(QName.createQName(aExcludeAspects.getString(i).trim())); + } + } + + Set includeAspects = null; + if(o.has("includeAspects")) + { + JSONArray aIncludeAspects = o.getJSONArray("includeAspects"); + includeAspects = new HashSet(aIncludeAspects.length()); + for(int i = 0; i < aIncludeAspects.length(); i++) + { + includeAspects.add(QName.createQName(aIncludeAspects.getString(i).trim())); + } + } + + Set excludeNodeTypes = null; + if(o.has("excludeNodeTypes")) + { + JSONArray aExcludeNodeTypes = o.getJSONArray("excludeNodeTypes"); + excludeNodeTypes = new HashSet(aExcludeNodeTypes.length()); + for(int i = 0; i < aExcludeNodeTypes.length(); i++) + { + excludeNodeTypes.add(QName.createQName(aExcludeNodeTypes.getString(i).trim())); + } + } + + Set includeNodeTypes = null; + if(o.has("includeNodeTypes")) + { + JSONArray aIncludeNodeTypes = o.getJSONArray("includeNodeTypes"); + includeNodeTypes = new HashSet(aIncludeNodeTypes.length()); + for(int i = 0; i < aIncludeNodeTypes.length(); i++) + { + includeNodeTypes.add(QName.createQName(aIncludeNodeTypes.getString(i).trim())); + } + } + + // 0 or Integer.MAX_VALUE => ignore + int maxResults = o.has("maxResults") ? o.getInt("maxResults") : 0; + + String storeProtocol = o.has("storeProtocol") ? o.getString("storeProtocol") : null; + String storeIdentifier = o.has("storeIdentifier") ? o.getString("storeIdentifier") : null; + + List txnIds = null; + if(aTxnIds != null) + { + txnIds = new ArrayList(aTxnIds.length()); + for(int i = 0; i < aTxnIds.length(); i++) + { + txnIds.add(aTxnIds.getLong(i)); + } + } + + WebNodeQueryCallback nodeQueryCallback = new WebNodeQueryCallback(maxResults); + NodeParameters nodeParameters = new NodeParameters(); + nodeParameters.setTransactionIds(txnIds); + nodeParameters.setFromTxnId(fromTxnId); + nodeParameters.setToTxnId(toTxnId); + nodeParameters.setFromNodeId(fromNodeId); + nodeParameters.setToNodeId(toNodeId); + nodeParameters.setExcludeAspects(excludeAspects); + nodeParameters.setIncludeAspects(includeAspects); + nodeParameters.setExcludeNodeTypes(excludeNodeTypes); + nodeParameters.setIncludeNodeTypes(includeNodeTypes); + nodeParameters.setStoreProtocol(storeProtocol); + nodeParameters.setStoreIdentifier(storeIdentifier); + nodeParameters.setMaxResults(maxResults); + solrTrackingComponent.getNodes(nodeParameters, nodeQueryCallback); + + Map model = new HashMap(1, 1.0f); + List nodes = nodeQueryCallback.getNodes(); + model.put("nodes", nodes); + + if (logger.isDebugEnabled()) + { + logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); + } + + return model; + } + catch(IOException e) + { + throw new WebScriptException("IO exception parsing request", e); + } + catch(JSONException e) + { + throw new WebScriptException("Invalid JSON", e); + } + } + + /** + * Callback for DAO get nodes query + * + */ + private static class WebNodeQueryCallback implements NodeQueryCallback + { + private ArrayList nodes; + + public WebNodeQueryCallback(int count) { + super(); + nodes = new ArrayList(count == 0 || count == Integer.MAX_VALUE ? 100 : count); + } + + @Override + public boolean handleNode(Node node) { + nodes.add(node); + + // continue - get next node + return true; + } + + public List getNodes() + { + return nodes; + } + } + } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java b/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java similarity index 96% rename from source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java rename to source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java index dcdb2c9ba9..cd69906aed 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/NodesMetaDataGet.java @@ -1,334 +1,334 @@ -/* - * 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.web.scripts.solr; - -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.repo.solr.MetaDataResultsFilter; -import org.alfresco.repo.solr.NodeMetaData; -import org.alfresco.repo.solr.NodeMetaDataParameters; -import org.alfresco.repo.solr.SOLRTrackingComponent; -import org.alfresco.repo.solr.SOLRTrackingComponent.NodeMetaDataQueryCallback; -import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.Path; -import org.alfresco.service.namespace.QName; -import org.alfresco.util.Pair; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.springframework.extensions.surf.util.Content; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptException; -import org.springframework.extensions.webscripts.WebScriptRequest; - -// todo url parameter to remove whitespace in results - make it the default? -/** - * Support for SOLR: Get metadata for nodes given IDs, ranges of IDs, etc. - *

- * - * @since 4.0 - */ -public class GetNodesMetaData extends DeclarativeWebScript -{ - protected static final Log logger = LogFactory.getLog(GetNodesMetaData.class); - private static final int INITIAL_DEFAULT_SIZE = 100; - private static final int BATCH_SIZE = 50; - - private SOLRTrackingComponent solrTrackingComponent; - private SOLRSerializer solrSerializer; - - public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) - { - this.solrTrackingComponent = solrTrackingComponent; - } - - public void setSolrSerializer(SOLRSerializer solrSerializer) - { - this.solrSerializer = solrSerializer; - } - - @Override - protected Map executeImpl(WebScriptRequest req, Status status) - { - try - { - Content content = req.getContent(); - if(content == null) - { - throw new WebScriptException("Failed to convert request to String"); - } - JSONObject o = new JSONObject(content.getContent()); - - List nodeIds = null; - if(o.has("nodeIds")) - { - JSONArray jsonNodeIds = o.getJSONArray("nodeIds"); - nodeIds = new ArrayList(jsonNodeIds.length()); - for(int i = 0; i < jsonNodeIds.length(); i++) - { - Long nodeId = jsonNodeIds.getLong(i); - nodeIds.add(nodeId); - } - } - - Long fromNodeId = o.has("fromNodeId") ? o.getLong("fromNodeId") : null; - Long toNodeId = o.has("toNodeId") ? o.getLong("toNodeId") : null; - - // 0 or Integer.MAX_VALUE => ignore - int maxResults = o.has("maxResults") ? o.getInt("maxResults") : 0; - - int size = 0; - if(maxResults != 0 && maxResults != Integer.MAX_VALUE) - { - size = maxResults; - } - else if(nodeIds != null) - { - size = nodeIds.size(); - } - else if(fromNodeId != null && toNodeId != null) - { - if((toNodeId.longValue() - fromNodeId.longValue()) > Integer.MAX_VALUE) - { - throw new WebScriptException("Too many nodes expected, try changing the criteria"); - } - size = (int)(toNodeId - fromNodeId); - } - - final boolean noSizeCalculated = (size == 0); - - // filters, defaults are 'true' - MetaDataResultsFilter filter = new MetaDataResultsFilter(); - if(o.has("includeAclId")) - { - filter.setIncludeAclId(o.getBoolean("includeAclId")); - } - if(o.has("includeAspects")) - { - filter.setIncludeAspects(o.getBoolean("includeAspects")); - } - if(o.has("includeNodeRef")) - { - filter.setIncludeNodeRef(o.getBoolean("includeNodeRef")); - } - if(o.has("includeOwner")) - { - filter.setIncludeOwner(o.getBoolean("includeOwner")); - } - if(o.has("includeProperties")) - { - filter.setIncludeProperties(o.getBoolean("includeProperties")); - } - if(o.has("includePaths")) - { - filter.setIncludePaths(o.getBoolean("includePaths")); - } - if(o.has("includeType")) - { - filter.setIncludeType(o.getBoolean("includeType")); - } - if(o.has("includeAssociations")) - { - filter.setIncludeAssociations(o.getBoolean("includeAssociations")); - } - - final ArrayList nodesMetaData = - new ArrayList(size > 0 ? size : INITIAL_DEFAULT_SIZE); - NodeMetaDataParameters params = new NodeMetaDataParameters(); - params.setNodeIds(nodeIds); - params.setFromNodeId(fromNodeId); - params.setToNodeId(toNodeId); - params.setMaxResults(maxResults); - - solrTrackingComponent.getNodesMetadata(params, filter, new NodeMetaDataQueryCallback() - { - private int counter = BATCH_SIZE; - private int numBatches = 0; - - @Override - public boolean handleNodeMetaData(NodeMetaData nodeMetaData) - { - // need to perform data structure conversions that are compatible with Freemarker - // e.g. Serializable -> String, QName -> String (because map keys must be string, number) - try - { - FreemarkerNodeMetaData fNodeMetaData = new FreemarkerNodeMetaData(solrSerializer, nodeMetaData); - nodesMetaData.add(fNodeMetaData); - } - catch(Exception e) - { - throw new AlfrescoRuntimeException("Problem converting to Freemarker", e); - } - - if(noSizeCalculated && --counter == 0) - { - counter = BATCH_SIZE; - nodesMetaData.ensureCapacity(++numBatches*BATCH_SIZE); - } - - return true; - } - }); - - Map model = new HashMap(1, 1.0f); - model.put("nodes", nodesMetaData); - model.put("filter", filter); - - if (logger.isDebugEnabled()) - { - logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); - } - - return model; - } - catch(IOException e) - { - throw new WebScriptException("IO exception parsing request", e); - } - catch(JSONException e) - { - throw new WebScriptException("Invalid JSON", e); - } - } - - /** - * Bean to store node meta data for use by FreeMarker templates - * - * @since 4.0 - */ - public static class FreemarkerNodeMetaData - { - private Long nodeId; - private NodeRef nodeRef; - private QName nodeType; - private Long aclId; - private Map properties; - private Set aspects; - private List paths; - private List childAssocs; - - public FreemarkerNodeMetaData(SOLRSerializer solrSerializer, NodeMetaData nodeMetaData) throws IOException, JSONException - { - setNodeId(nodeMetaData.getNodeId()); - setAclId(nodeMetaData.getAclId()); - setNodeRef(nodeMetaData.getNodeRef()); - setNodeType(nodeMetaData.getNodeType()); - - // convert Paths to Strings - List paths = new ArrayList(); - for(Pair pair : nodeMetaData.getPaths()) - { - JSONObject o = new JSONObject(); - o.put("path", solrSerializer.serializeValue(String.class, pair.getFirst())); - o.put("qname", solrSerializer.serializeValue(String.class, pair.getSecond())); - paths.add(o.toString(3)); - } - setPaths(paths); - - setChildAssocs(nodeMetaData.getChildAssocs()); - setAspects(nodeMetaData.getAspects()); - Map props = nodeMetaData.getProperties(); - Map properties = (props != null ? new HashMap(props.size()) : null); - for(QName propName : props.keySet()) - { - Serializable value = props.get(propName); - properties.put(solrSerializer.serializeValue(String.class, propName), - solrSerializer.serialize(propName, value)); - } - setProperties(properties); - } - - public NodeRef getNodeRef() - { - return nodeRef; - } - public void setNodeRef(NodeRef nodeRef) - { - this.nodeRef = nodeRef; - } - public List getPaths() - { - return paths; - } - public void setPaths(List paths) - { - this.paths = paths; - } - public QName getNodeType() - { - return nodeType; - } - public void setNodeType(QName nodeType) - { - this.nodeType = nodeType; - } - public Long getNodeId() - { - return nodeId; - } - public void setNodeId(Long nodeId) - { - this.nodeId = nodeId; - } - public Long getAclId() - { - return aclId; - } - public void setAclId(Long aclId) - { - this.aclId = aclId; - } - public Map getProperties() - { - return properties; - } - public void setProperties(Map properties) - { - this.properties = properties; - } - public Set getAspects() - { - return aspects; - } - public void setAspects(Set aspects) - { - this.aspects = aspects; - } - public List getChildAssocs() - { - return childAssocs; - } - public void setChildAssocs(List childAssocs) - { - this.childAssocs = childAssocs; - } - } - -} +/* + * 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.web.scripts.solr; + +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.repo.solr.MetaDataResultsFilter; +import org.alfresco.repo.solr.NodeMetaData; +import org.alfresco.repo.solr.NodeMetaDataParameters; +import org.alfresco.repo.solr.SOLRTrackingComponent; +import org.alfresco.repo.solr.SOLRTrackingComponent.NodeMetaDataQueryCallback; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.Path; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.extensions.surf.util.Content; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; + +// todo url parameter to remove whitespace in results - make it the default? +/** + * Support for SOLR: Get metadata for nodes given IDs, ranges of IDs, etc. + *

+ * + * @since 4.0 + */ +public class NodesMetaDataGet extends DeclarativeWebScript +{ + protected static final Log logger = LogFactory.getLog(NodesMetaDataGet.class); + private static final int INITIAL_DEFAULT_SIZE = 100; + private static final int BATCH_SIZE = 50; + + private SOLRTrackingComponent solrTrackingComponent; + private SOLRSerializer solrSerializer; + + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) + { + this.solrTrackingComponent = solrTrackingComponent; + } + + public void setSolrSerializer(SOLRSerializer solrSerializer) + { + this.solrSerializer = solrSerializer; + } + + @Override + protected Map executeImpl(WebScriptRequest req, Status status) + { + try + { + Content content = req.getContent(); + if(content == null) + { + throw new WebScriptException("Failed to convert request to String"); + } + JSONObject o = new JSONObject(content.getContent()); + + List nodeIds = null; + if(o.has("nodeIds")) + { + JSONArray jsonNodeIds = o.getJSONArray("nodeIds"); + nodeIds = new ArrayList(jsonNodeIds.length()); + for(int i = 0; i < jsonNodeIds.length(); i++) + { + Long nodeId = jsonNodeIds.getLong(i); + nodeIds.add(nodeId); + } + } + + Long fromNodeId = o.has("fromNodeId") ? o.getLong("fromNodeId") : null; + Long toNodeId = o.has("toNodeId") ? o.getLong("toNodeId") : null; + + // 0 or Integer.MAX_VALUE => ignore + int maxResults = o.has("maxResults") ? o.getInt("maxResults") : 0; + + int size = 0; + if(maxResults != 0 && maxResults != Integer.MAX_VALUE) + { + size = maxResults; + } + else if(nodeIds != null) + { + size = nodeIds.size(); + } + else if(fromNodeId != null && toNodeId != null) + { + if((toNodeId.longValue() - fromNodeId.longValue()) > Integer.MAX_VALUE) + { + throw new WebScriptException("Too many nodes expected, try changing the criteria"); + } + size = (int)(toNodeId - fromNodeId); + } + + final boolean noSizeCalculated = (size == 0); + + // filters, defaults are 'true' + MetaDataResultsFilter filter = new MetaDataResultsFilter(); + if(o.has("includeAclId")) + { + filter.setIncludeAclId(o.getBoolean("includeAclId")); + } + if(o.has("includeAspects")) + { + filter.setIncludeAspects(o.getBoolean("includeAspects")); + } + if(o.has("includeNodeRef")) + { + filter.setIncludeNodeRef(o.getBoolean("includeNodeRef")); + } + if(o.has("includeOwner")) + { + filter.setIncludeOwner(o.getBoolean("includeOwner")); + } + if(o.has("includeProperties")) + { + filter.setIncludeProperties(o.getBoolean("includeProperties")); + } + if(o.has("includePaths")) + { + filter.setIncludePaths(o.getBoolean("includePaths")); + } + if(o.has("includeType")) + { + filter.setIncludeType(o.getBoolean("includeType")); + } + if(o.has("includeAssociations")) + { + filter.setIncludeAssociations(o.getBoolean("includeAssociations")); + } + + final ArrayList nodesMetaData = + new ArrayList(size > 0 ? size : INITIAL_DEFAULT_SIZE); + NodeMetaDataParameters params = new NodeMetaDataParameters(); + params.setNodeIds(nodeIds); + params.setFromNodeId(fromNodeId); + params.setToNodeId(toNodeId); + params.setMaxResults(maxResults); + + solrTrackingComponent.getNodesMetadata(params, filter, new NodeMetaDataQueryCallback() + { + private int counter = BATCH_SIZE; + private int numBatches = 0; + + @Override + public boolean handleNodeMetaData(NodeMetaData nodeMetaData) + { + // need to perform data structure conversions that are compatible with Freemarker + // e.g. Serializable -> String, QName -> String (because map keys must be string, number) + try + { + FreemarkerNodeMetaData fNodeMetaData = new FreemarkerNodeMetaData(solrSerializer, nodeMetaData); + nodesMetaData.add(fNodeMetaData); + } + catch(Exception e) + { + throw new AlfrescoRuntimeException("Problem converting to Freemarker", e); + } + + if(noSizeCalculated && --counter == 0) + { + counter = BATCH_SIZE; + nodesMetaData.ensureCapacity(++numBatches*BATCH_SIZE); + } + + return true; + } + }); + + Map model = new HashMap(1, 1.0f); + model.put("nodes", nodesMetaData); + model.put("filter", filter); + + if (logger.isDebugEnabled()) + { + logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); + } + + return model; + } + catch(IOException e) + { + throw new WebScriptException("IO exception parsing request", e); + } + catch(JSONException e) + { + throw new WebScriptException("Invalid JSON", e); + } + } + + /** + * Bean to store node meta data for use by FreeMarker templates + * + * @since 4.0 + */ + public static class FreemarkerNodeMetaData + { + private Long nodeId; + private NodeRef nodeRef; + private QName nodeType; + private Long aclId; + private Map properties; + private Set aspects; + private List paths; + private List childAssocs; + + public FreemarkerNodeMetaData(SOLRSerializer solrSerializer, NodeMetaData nodeMetaData) throws IOException, JSONException + { + setNodeId(nodeMetaData.getNodeId()); + setAclId(nodeMetaData.getAclId()); + setNodeRef(nodeMetaData.getNodeRef()); + setNodeType(nodeMetaData.getNodeType()); + + // convert Paths to Strings + List paths = new ArrayList(); + for(Pair pair : nodeMetaData.getPaths()) + { + JSONObject o = new JSONObject(); + o.put("path", solrSerializer.serializeValue(String.class, pair.getFirst())); + o.put("qname", solrSerializer.serializeValue(String.class, pair.getSecond())); + paths.add(o.toString(3)); + } + setPaths(paths); + + setChildAssocs(nodeMetaData.getChildAssocs()); + setAspects(nodeMetaData.getAspects()); + Map props = nodeMetaData.getProperties(); + Map properties = (props != null ? new HashMap(props.size()) : null); + for(QName propName : props.keySet()) + { + Serializable value = props.get(propName); + properties.put(solrSerializer.serializeValue(String.class, propName), + solrSerializer.serialize(propName, value)); + } + setProperties(properties); + } + + public NodeRef getNodeRef() + { + return nodeRef; + } + public void setNodeRef(NodeRef nodeRef) + { + this.nodeRef = nodeRef; + } + public List getPaths() + { + return paths; + } + public void setPaths(List paths) + { + this.paths = paths; + } + public QName getNodeType() + { + return nodeType; + } + public void setNodeType(QName nodeType) + { + this.nodeType = nodeType; + } + public Long getNodeId() + { + return nodeId; + } + public void setNodeId(Long nodeId) + { + this.nodeId = nodeId; + } + public Long getAclId() + { + return aclId; + } + public void setAclId(Long aclId) + { + this.aclId = aclId; + } + public Map getProperties() + { + return properties; + } + public void setProperties(Map properties) + { + this.properties = properties; + } + public Set getAspects() + { + return aspects; + } + public void setAspects(Set aspects) + { + this.aspects = aspects; + } + public List getChildAssocs() + { + return childAssocs; + } + public void setChildAssocs(List childAssocs) + { + this.childAssocs = childAssocs; + } + } + +} diff --git a/source/java/org/alfresco/repo/web/scripts/solr/SOLRWebScriptTest.java b/source/java/org/alfresco/repo/web/scripts/solr/SOLRWebScriptTest.java index c1bc242be7..b1b7ffcd8f 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/SOLRWebScriptTest.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/SOLRWebScriptTest.java @@ -23,11 +23,9 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.node.NodeDAO; @@ -167,6 +165,25 @@ public class SOLRWebScriptTest extends BaseWebScriptTest return transactions; } + public void testAclChangeSetsGet() throws Exception + { + String url = "/api/solr/aclchangesets?fromTime=" + 0L + "&fromId=" + 0L; + TestWebScriptServer.GetRequest req = new TestWebScriptServer.GetRequest(url); + long startTime = System.currentTimeMillis(); + Response response = sendRequest(req, Status.STATUS_OK, admin); + long endTime = System.currentTimeMillis(); + + if(logger.isDebugEnabled()) + { + logger.debug(response.getContentAsString()); + } + JSONObject json = new JSONObject(response.getContentAsString()); + + JSONArray aclChangeSets = json.getJSONArray("aclChangeSets"); + + System.out.println("Got " + aclChangeSets.length() + " txns in " + (endTime - startTime) + " ms"); + } + private JSONArray getNodes(GetNodesParameters parameters, int maxResults, int expectedNumNodes) throws Exception { StringBuilder url = new StringBuilder("/api/solr/nodes"); diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java b/source/java/org/alfresco/repo/web/scripts/solr/TransactionsGet.java similarity index 87% rename from source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java rename to source/java/org/alfresco/repo/web/scripts/solr/TransactionsGet.java index 5768d1b83e..67c67ee865 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/TransactionsGet.java @@ -1,73 +1,72 @@ -/* - * 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.web.scripts.solr; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.repo.domain.solr.SOLRDAO; -import org.alfresco.repo.domain.solr.Transaction; -import org.alfresco.repo.solr.SOLRTrackingComponent; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.extensions.webscripts.DeclarativeWebScript; -import org.springframework.extensions.webscripts.Status; -import org.springframework.extensions.webscripts.WebScriptRequest; - -/** - * Support for SOLR: Get a list of transactions with a commit time greater than or equal to the given parameter. - * - * @since 4.0 - */ -public class GetTransactions extends DeclarativeWebScript -{ - protected static final Log logger = LogFactory.getLog(GetTransactions.class); - - private SOLRTrackingComponent solrTrackingComponent; - - public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) - { - this.solrTrackingComponent = solrTrackingComponent; - } - - protected Map executeImpl(WebScriptRequest req, Status status) - { - String minTxnIdParam = req.getParameter("minTxnId"); - String fromCommitTimeParam = req.getParameter("fromCommitTime"); - String maxResultsParam = req.getParameter("maxResults"); - - Long minTxnId = (minTxnIdParam == null ? null : Long.valueOf(minTxnIdParam)); - Long fromCommitTime = (fromCommitTimeParam == null ? null : Long.valueOf(fromCommitTimeParam)); - int maxResults = (maxResultsParam == null ? 0 : Integer.valueOf(maxResultsParam)); - - List transactions = solrTrackingComponent.getTransactions(minTxnId, fromCommitTime, maxResults); - - Map model = new HashMap(1, 1.0f); - model.put("transactions", transactions); - - if (logger.isDebugEnabled()) - { - logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); - } - - return model; - } - -} +/* + * 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.web.scripts.solr; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.repo.solr.SOLRTrackingComponent; +import org.alfresco.repo.solr.Transaction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Support for SOLR: Get a list of transactions with a commit time greater than or equal to the given parameter. + * + * @since 4.0 + */ +public class TransactionsGet extends DeclarativeWebScript +{ + protected static final Log logger = LogFactory.getLog(TransactionsGet.class); + + private SOLRTrackingComponent solrTrackingComponent; + + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) + { + this.solrTrackingComponent = solrTrackingComponent; + } + + protected Map executeImpl(WebScriptRequest req, Status status) + { + String minTxnIdParam = req.getParameter("minTxnId"); + String fromCommitTimeParam = req.getParameter("fromCommitTime"); + String maxResultsParam = req.getParameter("maxResults"); + + Long minTxnId = (minTxnIdParam == null ? null : Long.valueOf(minTxnIdParam)); + Long fromCommitTime = (fromCommitTimeParam == null ? null : Long.valueOf(fromCommitTimeParam)); + int maxResults = (maxResultsParam == null ? 1024 : Integer.valueOf(maxResultsParam)); + + List transactions = solrTrackingComponent.getTransactions(minTxnId, fromCommitTime, maxResults); + + Map model = new HashMap(1, 1.0f); + model.put("transactions", transactions); + + if (logger.isDebugEnabled()) + { + logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model); + } + + return model; + } + +}