From c47ecc4208122187e2a63dcbf3c869e23c4add8c Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Wed, 8 Jun 2011 17:29:54 +0000 Subject: [PATCH] Merged DEV/SWIFT to HEAD 27125: Subtasks of ALF-7072: RSOLR 013: Remote API to get ACLs and readers - ALF-8334: RSOLR 013: Modify ACL schema to record change times - ALF-8336: RSOLR 013: DB upgrade scripts for ACL changes - TODO: Query APIs 27128: Added TooManyResultsException as a concurrency detection trigger - Usually too many results indicates that the DB table key is not as specific as it should be, but it's AVM that showed this up. 27132: Clean up: javadocs; non-javadocs; uncommented fields; @since tags; etc. 27134: Removed empty directory 27135: Fix for ALF-8333: CMIS query: JOIN on an aspect results in CmisInvalidArgumentException - incorrect scope used when building orderings 27139: Fixed SORL transaction tracking queries - Queries were using incompatible boolean comparisons - Added SOLRDAO to test suite - Cleaned up code and reformatted code 27141: Minor additions to CannedQuery interface - get parameter bean - construct sort details from a list - ALF-7167: Canned queries 27146: RINF 09 / RINF 10: DB-based paged query for get children (DocLib & CMIS) - milestone check-in for sprint demo & review (WIP) - added new FileFolderService (paged) list query (public API is subject to change) - moved temp JavaScript sorting to Java - example usage by DocLib (via ScriptNode) and CMIS (via AlfrescoCmisService) - implemented as demo "canned query" including embedded use of "list" permission interceptor - ALF-7402 / ALF-7168 27150: RINF 09 / RINF 10: DB-based paged query for get children (DocLib & CMIS) - missed file (follow-on to r27146) 27158: ALF-7070, ALF-7072: SOLR tracking (node and changeset) - Pulled non-DAO code into SOLRTrackingComponent - DAO code and related tests just test basic CRUD - SOLRTrackingComponent does complex cross-schema manipulation 27159: Fixed line ending and removed svn:eol-style 27160: ALF-8334: RSOLR 013: Fixed SQL Server syntax 27165: RINF 09 / RINF 10: DB-based paged query for get children (DocLib & CMIS) - fix listDeepFolders (causing Imap*Test to fail) - all private methods now order files followed by folders (consistent with existing public APIs such as FileFolderService.search & ScriptNode.childFileFolders*) - follow-on to r27146 28271: Consolidate diagnostic logging for max perm checks (ALF-8388 + ALF-8419) - note: this should be a trivial merge to HEAD git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28292 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../slingshot/documentlibrary/doclist.get.js | 143 ++++-------------- .../web-scripts-application-context.xml | 6 +- .../web/scripts/solr/GetAclChangeSets.java | 74 +++++++++ .../repo/web/scripts/solr/GetNodeContent.java | 81 ++++------ .../repo/web/scripts/solr/GetNodes.java | 33 ++-- .../web/scripts/solr/GetNodesMetaData.java | 39 ++--- .../web/scripts/solr/GetNodesParameters.java | 5 + .../web/scripts/solr/GetTransactions.java | 23 +-- .../repo/web/scripts/solr/NodeMetaData.java | 5 + .../repo/web/scripts/solr/PropertyValue.java | 2 +- .../repo/web/scripts/solr/SOLRSerializer.java | 7 +- 11 files changed, 194 insertions(+), 224 deletions(-) create mode 100644 source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js index b0c89e744a..912ef5d58d 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js @@ -21,6 +21,8 @@ function getDoclist() // Try to find a filter query based on the passed-in arguments var allNodes = [], + totalRecords, + paged = false, favourites = Common.getFavourites(), filterParams = Filters.getFilterParams(filter, parsedArgs, { @@ -39,30 +41,28 @@ function getDoclist() { var ignoreTypes=["cm:thumbnail", "fm:forums","fm:forum","fm:topic","fm:post"]; - allNodes = parentNode.childFileFolders(true, true, ignoreTypes); + var skip = -1; + var max = -1; - // TODO push down sorting to FileFolderService.list (see also AlfrescoCmisService.getChildren) - if ((args.sortField == null) || (args.sortField == "cm:name")) + if (args.size != null) { - sortByName(allNodes, args.sortAsc); - } - else if (args.sortField == "cm:content.size") - { - sortBySize(allNodes, args.sortAsc); - } - else if (args.sortField == "cm:content.mimetype") - { - sortByMimetype(allNodes, args.sortAsc); - } - else if ((args.sortField == "cm:created") || (args.sortField == "cm:modified")) - { - sortByPropDate(allNodes, args.sortAsc, args.sortField); - } - else - { - // assume string (=> supports toLowerCase) - sortByPropStr(allNodes, args.sortAsc, args.sortField); + max = args.size; + + if (args.pos > 0) + { + skip = (args.pos - 1) * max; + } } + + var sortField = (args.sortField == null ? "cm:name" : args.sortField); + var sortAsc = (((args.sortAsc == null) || (args.sortAsc == "true")) ? true : false); + + var pagedResult = parentNode.childFileFolders(true, true, ignoreTypes, skip, max, sortField, sortAsc); + + allNodes = pagedResult.result; + totalRecords = pagedResult.totalCount; + + paged = true; } } else @@ -112,8 +112,8 @@ function getDoclist() // Node type counts var folderNodesCount = folderNodes.length, documentNodesCount = documentNodes.length, - nodes, totalRecords; - + nodes; + if (parsedArgs.type === "documents") { nodes = documentNodes; @@ -123,16 +123,20 @@ function getDoclist() // TODO: Sorting with folders at end -- swap order of concat() nodes = folderNodes.concat(documentNodes); } - totalRecords = nodes.length; // Pagination var pageSize = args.size || nodes.length, pagePos = args.pos || "1", startIndex = (pagePos - 1) * pageSize; - - // Trim the nodes array down to the page size - nodes = nodes.slice(startIndex, pagePos * pageSize); - + + if (! paged) + { + totalRecords = nodes.length; + + // Trim the nodes array down to the page size + nodes = nodes.slice(startIndex, pagePos * pageSize); + } + // Common or variable parent container? var parent = null; @@ -257,89 +261,6 @@ function getDoclist() }); } -// TEMP -function sortByName(arr, sortAsc) -{ - arr.sort - ( - function( a, b ) - { - return ((sortAsc == null) || (sortAsc == "true")) - ? (b.name.toLowerCase() > a.name.toLowerCase() ? -1 : 1) - : (a.name.toLowerCase() > b.name.toLowerCase() ? -1 : 1); - } - ); -} - -// TEMP -function sortBySize(arr, sortAsc) -{ - arr.sort - ( - function( a, b ) - { - return ((sortAsc == null) || (sortAsc == "true")) - ? (b.size > a.size ? -1 : 1) - : (a.size > b.size ? -1 : 1); - } - ); -} - -// TEMP -function sortByMimetype(arr, sortAsc) -{ - arr.sort - ( - function( a, b ) - { - return ((sortAsc == null) || (sortAsc == "true")) - ? (b.mimetype.toLowerCase() > a.mimetype.toLowerCase() ? -1 : 1) - : (a.mimetype.toLowerCase() > b.mimetype.toLowerCase() ? -1 : 1); - } - ); -} - -// TEMP -function sortByPropStr(arr, sortAsc, sortField) -{ - arr.sort - ( - function( a, b ) - { - var aStr = a.properties[sortField]; - if (aStr == null) - { - aStr = ""; - } - - var bStr = b.properties[sortField]; - if (bStr == null) - { - bStr = ""; - } - - return ((sortAsc == null) || (sortAsc == "true")) - ? (bStr == "" && aStr != "" ? -1 : (bStr != "" && aStr == "" ? 1 : (bStr.toLowerCase() > aStr.toLowerCase() ? -1 : 1))) - : (aStr == "" && bStr != "" ? -1 : (aStr != "" && bStr == "" ? 1 : (aStr.toLowerCase() > bStr.toLowerCase() ? -1 : 1))); - } - ); -} - -// TEMP -function sortByPropDate(arr, sortAsc, sortField) -{ - arr.sort - ( - function( a, b ) - { - return ((sortAsc == null) || (sortAsc == "true")) - ? (b.properties[sortField] - a.properties[sortField]) - : (a.properties[sortField] - b.properties[sortField]); - } - ); -} - - /** * Document List Component: doclist */ diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index d33d676606..93c1e9ee23 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1230,19 +1230,19 @@ - + - + - + diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java b/source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java new file mode 100644 index 0000000000..3cb08d6a51 --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetAclChangeSets.java @@ -0,0 +1,74 @@ +/* + * 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; + } +} diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java b/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java index 02ed60f890..481a0fbf82 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetNodeContent.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; -import java.util.Map; import javax.servlet.http.HttpServletResponse; @@ -37,7 +36,6 @@ 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.cmr.repository.TransformationOptions; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.apache.commons.httpclient.HttpStatus; @@ -48,12 +46,10 @@ 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 { @@ -87,7 +83,7 @@ public class GetNodeContent extends StreamContent } /** - * @see org.alfresco.web.scripts.WebScript#execute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) + * @in */ public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { @@ -155,47 +151,38 @@ public class GetNodeContent extends StreamContent return; } - // optimisation - already text so just return the content directly - // TODO - better way of doing this? - if(reader.getMimetype().startsWith("text/")) + // 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) { - textReader = reader; + res.setHeader(TRANSFORM_STATUS_HEADER, "noTransform"); + res.setStatus(HttpStatus.SC_NO_CONTENT); + return; } - else + + try { - ContentWriter writer = contentService.getTempWriter(); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - - TransformationOptions options = new TransformationOptions(); - 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; - } + transformer.transform(reader, writer); + } + catch (ContentIOException e) + { + transformException = e; + } - try + 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()) { - // TODO how to ensure UTF-8 in the transformed text? - 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); - } + transformException = new ContentIOException( + "The transformation did not write any content, yet: \n" + + " transformer: " + transformer + "\n" + " temp writer: " + writer); } } @@ -210,17 +197,5 @@ public class GetNodeContent extends StreamContent res.setStatus(HttpStatus.SC_OK); streamContentImpl(req, res, textReader, false, modified, String.valueOf(modified.getTime()), null); } - - /* writer.addListener(new ContentStreamListener() - { - - @Override - public void contentStreamClosed() throws ContentIOException - { - // TODO Auto-generated method stub - - } - - });*/ } } diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java b/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java index 915377c35e..fccb7f92da 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetNodes.java @@ -27,9 +27,9 @@ import java.util.Map; import java.util.Set; import org.alfresco.repo.domain.node.Node; -import org.alfresco.repo.domain.solr.NodeParameters; -import org.alfresco.repo.domain.solr.SOLRDAO; -import org.alfresco.repo.domain.solr.SOLRDAO.NodeQueryCallback; +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; @@ -43,11 +43,11 @@ 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. + * 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 */ @@ -55,20 +55,13 @@ public class GetNodes extends DeclarativeWebScript { protected static final Log logger = LogFactory.getLog(GetNodes.class); - private SOLRDAO solrDAO; + private SOLRTrackingComponent solrTrackingComponent; - /** - * @param solrDAO the solrDAO to set - */ - public void setSolrDAO(SOLRDAO solrDAO) + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) { - this.solrDAO = solrDAO; + this.solrTrackingComponent = solrTrackingComponent; } - - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status) - */ + @Override protected Map executeImpl(WebScriptRequest req, Status status) { @@ -162,7 +155,7 @@ public class GetNodes extends DeclarativeWebScript nodeParameters.setStoreProtocol(storeProtocol); nodeParameters.setStoreIdentifier(storeIdentifier); nodeParameters.setMaxResults(maxResults); - solrDAO.getNodes(nodeParameters, nodeQueryCallback); + solrTrackingComponent.getNodes(nodeParameters, nodeQueryCallback); Map model = new HashMap(1, 1.0f); List nodes = nodeQueryCallback.getNodes(); diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java b/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java index b6ce4bb5d5..dcdb2c9ba9 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetNodesMetaData.java @@ -27,11 +27,11 @@ import java.util.Map; import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.repo.domain.solr.MetaDataResultsFilter; -import org.alfresco.repo.domain.solr.NodeMetaData; -import org.alfresco.repo.domain.solr.NodeMetaDataParameters; -import org.alfresco.repo.domain.solr.SOLRDAO; -import org.alfresco.repo.domain.solr.SOLRDAO.NodeMetaDataQueryCallback; +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; @@ -49,32 +49,31 @@ 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 SOLRDAO solrDAO; + private SOLRTrackingComponent solrTrackingComponent; private SOLRSerializer solrSerializer; - /** - * @param solrDAO the solrDAO to set - */ - public void setSolrDAO(SOLRDAO solrDAO) + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) { - this.solrDAO = solrDAO; + this.solrTrackingComponent = solrTrackingComponent; } - + public void setSolrSerializer(SOLRSerializer solrSerializer) { this.solrSerializer = solrSerializer; } - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status) - */ @Override protected Map executeImpl(WebScriptRequest req, Status status) { @@ -168,11 +167,12 @@ public class GetNodesMetaData extends DeclarativeWebScript params.setToNodeId(toNodeId); params.setMaxResults(maxResults); - solrDAO.getNodesMetadata(params, filter, new NodeMetaDataQueryCallback() + 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 @@ -218,8 +218,10 @@ public class GetNodesMetaData extends DeclarativeWebScript } } - /* + /** * Bean to store node meta data for use by FreeMarker templates + * + * @since 4.0 */ public static class FreemarkerNodeMetaData { @@ -232,7 +234,6 @@ public class GetNodesMetaData extends DeclarativeWebScript private List paths; private List childAssocs; - @SuppressWarnings("unchecked") public FreemarkerNodeMetaData(SOLRSerializer solrSerializer, NodeMetaData nodeMetaData) throws IOException, JSONException { setNodeId(nodeMetaData.getNodeId()); diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesParameters.java b/source/java/org/alfresco/repo/web/scripts/solr/GetNodesParameters.java index 21ac3d7ea7..4dbf2ace33 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetNodesParameters.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetNodesParameters.java @@ -23,6 +23,11 @@ import java.util.Set; import org.alfresco.service.namespace.QName; +/** + * Input parameters for retrieving node details for SOLR. + * + * @since 4.0 + */ public class GetNodesParameters { private List transactionIds; diff --git a/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java b/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java index c2b83bbb09..5768d1b83e 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/GetTransactions.java @@ -24,6 +24,7 @@ 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; @@ -31,31 +32,21 @@ 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. + * Support for SOLR: Get a list of transactions with a commit time greater than or equal to the given parameter. * * @since 4.0 */ -// TODO check that this does not return incomplete transactions i.e. commitTimeMs is set - does -// the sql account for this? public class GetTransactions extends DeclarativeWebScript { protected static final Log logger = LogFactory.getLog(GetTransactions.class); - private SOLRDAO solrDAO; + private SOLRTrackingComponent solrTrackingComponent; - /** - * @param solrDAO the SOLDAO to set - */ - public void setSolrDAO(SOLRDAO solrDAO) + public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent) { - this.solrDAO = solrDAO; + this.solrTrackingComponent = solrTrackingComponent; } - - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status) - */ - @Override + protected Map executeImpl(WebScriptRequest req, Status status) { String minTxnIdParam = req.getParameter("minTxnId"); @@ -66,7 +57,7 @@ public class GetTransactions extends DeclarativeWebScript Long fromCommitTime = (fromCommitTimeParam == null ? null : Long.valueOf(fromCommitTimeParam)); int maxResults = (maxResultsParam == null ? 0 : Integer.valueOf(maxResultsParam)); - List transactions = solrDAO.getTransactions(minTxnId, fromCommitTime, maxResults); + List transactions = solrTrackingComponent.getTransactions(minTxnId, fromCommitTime, maxResults); Map model = new HashMap(1, 1.0f); model.put("transactions", transactions); diff --git a/source/java/org/alfresco/repo/web/scripts/solr/NodeMetaData.java b/source/java/org/alfresco/repo/web/scripts/solr/NodeMetaData.java index d3bc8468e7..66e5ede00f 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/NodeMetaData.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/NodeMetaData.java @@ -26,6 +26,11 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.namespace.QName; +/** + * Bean to carry node metadata + * + * @since 4.0 + */ public class NodeMetaData { private long id; diff --git a/source/java/org/alfresco/repo/web/scripts/solr/PropertyValue.java b/source/java/org/alfresco/repo/web/scripts/solr/PropertyValue.java index e9de640317..87b327fc67 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/PropertyValue.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/PropertyValue.java @@ -1,6 +1,6 @@ package org.alfresco.repo.web.scripts.solr; -/* +/** * Represents a property value to be used by Freemarker * * @since 4.0 diff --git a/source/java/org/alfresco/repo/web/scripts/solr/SOLRSerializer.java b/source/java/org/alfresco/repo/web/scripts/solr/SOLRSerializer.java index 008924c1b0..16d7ab7599 100644 --- a/source/java/org/alfresco/repo/web/scripts/solr/SOLRSerializer.java +++ b/source/java/org/alfresco/repo/web/scripts/solr/SOLRSerializer.java @@ -52,7 +52,12 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -class SOLRSerializer +/** + * SOLR conversions of values to JSON-compatible String. + * + * @since 4.0 + */ +/* package */ class SOLRSerializer { protected static final Log logger = LogFactory.getLog(SOLRSerializer.class);