You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by pr...@apache.org on 2012/08/30 17:44:02 UTC
svn commit: r1378994 -
/oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java
Author: pramirez
Date: Thu Aug 30 15:44:02 2012
New Revision: 1378994
URL: http://svn.apache.org/viewvc?rev=1378994&view=rev
Log:
OODT-489 Reduce number of queries performed by paging API.
Modified:
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java
Modified: oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java
URL: http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java?rev=1378994&r1=1378993&r2=1378994&view=diff
==============================================================================
--- oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java (original)
+++ oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/LuceneCatalog.java Thu Aug 30 15:44:02 2012
@@ -634,7 +634,7 @@ public class LuceneCatalog implements Ca
public List<String> query(Query query, ProductType type) throws CatalogException {
// paginate products returns full products, but the query method
// is expected to return product ids
- List<Product> fullProducts = paginateQuery(query, type, -1);
+ List<Product> fullProducts = paginateQuery(query, type, -1, null);
List<String> productIds = null;
if (fullProducts != null && fullProducts.size() > 0) {
@@ -721,7 +721,7 @@ public class LuceneCatalog implements Ca
Query query = new Query();
for (int pageNum = 1; pageNum < numPages + 1; pageNum++) {
- List<Product> pageProducts = paginateQuery(query, type, pageNum);
+ List<Product> pageProducts = paginateQuery(query, type, pageNum, null);
products.addAll(pageProducts);
}
@@ -756,12 +756,15 @@ public class LuceneCatalog implements Ca
* @see org.apache.oodt.cas.filemgr.util.Pagination#getFirstPage(org.apache.oodt.cas.filemgr.structs.ProductType)
*/
public ProductPage getFirstPage(ProductType type) {
- ProductPage firstPage = null;
+ ProductPage firstPage = new ProductPage();
List<Product> products = null;
Query query = new Query();
-
+
+ // now construct the page
+ firstPage.setPageNum(1);
+ firstPage.setPageSize(pageSize);
try {
- products = paginateQuery(query, type, 1);
+ products = paginateQuery(query, type, 1, firstPage);
} catch (CatalogException e) {
LOG.log(Level.WARNING,
"CatalogException getting first page for product type: ["
@@ -769,28 +772,13 @@ public class LuceneCatalog implements Ca
+ "] from catalog: Message: " + e.getMessage());
return null;
}
-
+ // There are no products and thus no first page
if (products == null || (products != null && products.size() == 0)) {
- return firstPage;
- } else {
- // now construct the page
- firstPage = new ProductPage();
- firstPage.setPageNum(1);
- firstPage.setPageSize(pageSize);
- try {
- firstPage.setTotalPages(PaginationUtils.getTotalPage(
- getNumHits(query, type), pageSize));
- } catch (Exception e) {
- LOG.log(Level.WARNING,
- "Exception getting total pages for query: [" + query
- + "]: Message: " + e.getMessage());
- firstPage.setTotalPages(-1);
- }
-
- firstPage.setPageProducts(products);
-
+ return null;
}
+ firstPage.setPageProducts(products);
+
return firstPage;
}
@@ -800,32 +788,28 @@ public class LuceneCatalog implements Ca
* @see org.apache.oodt.cas.filemgr.util.Pagination#getLastProductPage(org.apache.oodt.cas.filemgr.structs.ProductType)
*/
public ProductPage getLastProductPage(ProductType type) {
- ProductPage lastPage = null;
+ ProductPage lastPage = new ProductPage();
ProductPage firstPage = getFirstPage(type);
List<Product> products = null;
Query query = new Query();
-
+
+ // now construct the page
+ lastPage.setPageNum(firstPage.getTotalPages());
+ lastPage.setPageSize(pageSize);
try {
- products = paginateQuery(query, type, firstPage.getTotalPages());
+ products = paginateQuery(query, type, firstPage.getTotalPages(), lastPage);
} catch (CatalogException e) {
- LOG.log(Level.WARNING,
- "CatalogException getting last page for product type: ["
- + type.getProductTypeId()
- + "] from catalog: Message: " + e.getMessage());
- return null;
+ LOG.log(Level.WARNING,
+ "CatalogException getting last page for product type: ["
+ + type.getProductTypeId()
+ + "] from catalog: Message: " + e.getMessage());
+ return null;
}
-
+ // There are no products thus there is no last page
if (products == null || (products != null && products.size() == 0)) {
- return lastPage;
- } else {
- // now construct the page
- lastPage = new ProductPage();
- lastPage.setPageNum(firstPage.getTotalPages());
- lastPage.setPageSize(pageSize);
- lastPage.setTotalPages(firstPage.getTotalPages());
- lastPage.setPageProducts(products);
-
+ return null;
}
+ lastPage.setPageProducts(products);
return lastPage;
}
@@ -846,30 +830,26 @@ public class LuceneCatalog implements Ca
}
List<Product> products = null;
- ProductPage nextPage = null;
+ ProductPage nextPage = new ProductPage();
Query query = new Query();
+ // now construct the page
+ nextPage.setPageNum(currentPage.getPageNum() + 1);
+ nextPage.setPageSize(pageSize);
try {
- products = paginateQuery(query, type, currentPage.getPageNum() + 1);
+ products = paginateQuery(query, type, currentPage.getPageNum() + 1, nextPage);
} catch (CatalogException e) {
LOG.log(Level.WARNING,
- "CatalogException getting next page for product type: ["
- + type.getProductTypeId()
- + "] from catalog: Message: " + e.getMessage());
+ "CatalogException getting next page for product type: ["
+ + type.getProductTypeId()
+ + "] from catalog: Message: " + e.getMessage());
return null;
}
-
+ // There are no products and thus no next page
if (products == null || (products != null && products.size() == 0)) {
- return nextPage;
- } else {
- // now construct the page
- nextPage = new ProductPage();
- nextPage.setPageNum(currentPage.getPageNum() + 1);
- nextPage.setPageSize(pageSize);
- nextPage.setTotalPages(currentPage.getTotalPages());
- nextPage.setPageProducts(products);
-
+ return null;
}
+ nextPage.setPageProducts(products);
return nextPage;
}
@@ -889,11 +869,15 @@ public class LuceneCatalog implements Ca
return currentPage;
}
List<Product> products = null;
- ProductPage prevPage = null;
+ ProductPage prevPage = new ProductPage();
Query query = new Query();
+ // now construct the page
+ prevPage = new ProductPage();
+ prevPage.setPageNum(currentPage.getPageNum() - 1);
+ prevPage.setPageSize(pageSize);
try {
- products = paginateQuery(query, type, currentPage.getPageNum() - 1);
+ products = paginateQuery(query, type, currentPage.getPageNum() - 1, prevPage);
} catch (CatalogException e) {
LOG.log(Level.WARNING,
"CatalogException getting prev page for product type: ["
@@ -901,18 +885,12 @@ public class LuceneCatalog implements Ca
+ "] from catalog: Message: " + e.getMessage());
return null;
}
-
+
+ // There are no products and thus no pages
if (products == null || (products != null && products.size() == 0)) {
- return prevPage;
- } else {
- // now construct the page
- prevPage = new ProductPage();
- prevPage.setPageNum(currentPage.getPageNum() - 1);
- prevPage.setPageSize(pageSize);
- prevPage.setTotalPages(currentPage.getTotalPages());
- prevPage.setPageProducts(products);
-
+ return null;
}
+ prevPage.setPageProducts(products);
return prevPage;
}
@@ -929,9 +907,7 @@ public class LuceneCatalog implements Ca
ProductPage retPage = new ProductPage();
retPage.setPageNum(pageNum);
retPage.setPageSize(pageSize);
- retPage.setTotalPages(PaginationUtils.getTotalPage(getNumHits(
- query, type), pageSize));
- retPage.setPageProducts(paginateQuery(query, type, pageNum));
+ retPage.setPageProducts(paginateQuery(query, type, pageNum, retPage));
return retPage;
} catch (Exception e) {
e.printStackTrace();
@@ -1229,11 +1205,9 @@ public class LuceneCatalog implements Ca
for (QueryCriteria queryCriteria : query.getCriteria())
booleanQuery.add(this.getQuery(queryCriteria), BooleanClause.Occur.MUST);
- Sort sort = new Sort(new SortField("CAS.ProductReceivedTime",
- SortField.STRING, true));
LOG.log(Level.FINE, "Querying LuceneCatalog: q: [" + booleanQuery
+ "]");
- Hits hits = searcher.search(booleanQuery, sort);
+ Hits hits = searcher.search(booleanQuery);
numHits = hits.length();
} catch (IOException e) {
LOG.log(Level.WARNING,
@@ -1254,7 +1228,7 @@ public class LuceneCatalog implements Ca
return numHits;
}
- private List<Product> paginateQuery(Query query, ProductType type, int pageNum)
+ private List<Product> paginateQuery(Query query, ProductType type, int pageNum, ProductPage page)
throws CatalogException {
List<Product> products = null;
IndexSearcher searcher = null;
@@ -1285,6 +1259,12 @@ public class LuceneCatalog implements Ca
LOG.log(Level.FINE, "Querying LuceneCatalog: q: [" + booleanQuery
+ "]");
Hits hits = searcher.search(booleanQuery, sort);
+
+ // Calculate page size and set it while we have the results
+ if (page != null) {
+ page.setTotalPages(PaginationUtils.getTotalPage(hits.length(), pageSize));
+ }
+
if (hits.length() > 0) {
int startNum = (pageNum - 1) * pageSize;