Filters for Native SQL Publication List
git-svn-id: https://svn.libreccm.org/ccm/trunk@4936 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
662aa21452
commit
4f9b46b64f
|
|
@ -69,11 +69,27 @@ public class PublicationList extends AbstractComponent {
|
||||||
+ "LEFT JOIN ct_internet_article ON ct_publications.publication_id = ct_internet_article.internet_article_id "
|
+ "LEFT JOIN ct_internet_article ON ct_publications.publication_id = ct_internet_article.internet_article_id "
|
||||||
+ "LEFT JOIN ct_unpublished ON ct_publications.publication_id = ct_unpublished.unpublished_id "
|
+ "LEFT JOIN ct_unpublished ON ct_publications.publication_id = ct_unpublished.unpublished_id "
|
||||||
+ "LEFT JOIN ct_grey_literature ON ct_unpublished.unpublished_id = ct_grey_literature.grey_literature_id "
|
+ "LEFT JOIN ct_grey_literature ON ct_unpublished.unpublished_id = ct_grey_literature.grey_literature_id "
|
||||||
+ "WHERE parent_id IN (SELECT object_id FROM cat_object_category_map WHERE category_id = ?) AND version = 'live' "
|
+ "WHERE parent_id IN (SELECT object_id FROM cat_object_category_map WHERE category_id = ?) AND version = 'live' %s"
|
||||||
+ "%s "
|
+ "%s "
|
||||||
+ "LIMIT ? OFFSET ?";
|
+ "LIMIT ? OFFSET ?";
|
||||||
|
private final static String COUNT_PUBLICATIONS_QUERY_TEMPLATE
|
||||||
|
= "SELECT COUNT(*) "
|
||||||
|
+ "FROM cms_items "
|
||||||
|
+ "JOIN cms_pages ON cms_items.item_id = cms_pages.item_id "
|
||||||
|
+ "JOIN content_types ON cms_items.type_id = content_types.type_id "
|
||||||
|
+ "JOIN ct_publications ON cms_items.item_id = ct_publications.publication_id "
|
||||||
|
+ "LEFT JOIN ct_publication_with_publisher ON ct_publications.publication_id = ct_publication_with_publisher.publication_with_publisher_id "
|
||||||
|
+ "LEFT JOIN ct_proceedings ON ct_publications.publication_id = ct_proceedings.proceedings_id "
|
||||||
|
+ "LEFT JOIN ct_article_in_collected_volume ON ct_publications.publication_id = ct_article_in_collected_volume.article_id "
|
||||||
|
+ "LEFT JOIN ct_article_in_journal ON ct_publications.publication_id = ct_article_in_journal.article_in_journal_id "
|
||||||
|
+ "LEFT JOIN ct_expertise ON ct_publications.publication_id = ct_expertise.expertise_id "
|
||||||
|
+ "LEFT JOIN ct_inproceedings ON ct_publications.publication_id = ct_inproceedings.inproceedings_id "
|
||||||
|
+ "LEFT JOIN ct_internet_article ON ct_publications.publication_id = ct_internet_article.internet_article_id "
|
||||||
|
+ "LEFT JOIN ct_unpublished ON ct_publications.publication_id = ct_unpublished.unpublished_id "
|
||||||
|
+ "LEFT JOIN ct_grey_literature ON ct_unpublished.unpublished_id = ct_grey_literature.grey_literature_id "
|
||||||
|
+ "WHERE parent_id IN (SELECT object_id FROM cat_object_category_map WHERE category_id = ?) AND version = 'live' %s";
|
||||||
// private final PreparedStatement publicationsQueryStatement;
|
// private final PreparedStatement publicationsQueryStatement;
|
||||||
private final PreparedStatement countPublicationsQueryStatement;
|
// private final PreparedStatement countPublicationsQueryStatement;
|
||||||
private final PreparedStatement availableYearsQueryStatement;
|
private final PreparedStatement availableYearsQueryStatement;
|
||||||
private final PreparedStatement authorsQueryStatement;
|
private final PreparedStatement authorsQueryStatement;
|
||||||
private final PreparedStatement publisherQueryStatement;
|
private final PreparedStatement publisherQueryStatement;
|
||||||
|
|
@ -132,24 +148,23 @@ public class PublicationList extends AbstractComponent {
|
||||||
// + "LIMIT ? OFFSET ?";
|
// + "LIMIT ? OFFSET ?";
|
||||||
// );
|
// );
|
||||||
|
|
||||||
countPublicationsQueryStatement = connection.prepareStatement(
|
// countPublicationsQueryStatement = connection.prepareStatement(
|
||||||
"SELECT COUNT(*) "
|
// "SELECT COUNT(*) "
|
||||||
+ "FROM cms_items "
|
// + "FROM cms_items "
|
||||||
+ "JOIN cms_pages ON cms_items.item_id = cms_pages.item_id "
|
// + "JOIN cms_pages ON cms_items.item_id = cms_pages.item_id "
|
||||||
+ "JOIN content_types ON cms_items.type_id = content_types.type_id "
|
// + "JOIN content_types ON cms_items.type_id = content_types.type_id "
|
||||||
+ "JOIN ct_publications ON cms_items.item_id = ct_publications.publication_id "
|
// + "JOIN ct_publications ON cms_items.item_id = ct_publications.publication_id "
|
||||||
+ "LEFT JOIN ct_publication_with_publisher ON ct_publications.publication_id = ct_publication_with_publisher.publication_with_publisher_id "
|
// + "LEFT JOIN ct_publication_with_publisher ON ct_publications.publication_id = ct_publication_with_publisher.publication_with_publisher_id "
|
||||||
+ "LEFT JOIN ct_proceedings ON ct_publications.publication_id = ct_proceedings.proceedings_id "
|
// + "LEFT JOIN ct_proceedings ON ct_publications.publication_id = ct_proceedings.proceedings_id "
|
||||||
+ "LEFT JOIN ct_article_in_collected_volume ON ct_publications.publication_id = ct_article_in_collected_volume.article_id "
|
// + "LEFT JOIN ct_article_in_collected_volume ON ct_publications.publication_id = ct_article_in_collected_volume.article_id "
|
||||||
+ "LEFT JOIN ct_article_in_journal ON ct_publications.publication_id = ct_article_in_journal.article_in_journal_id "
|
// + "LEFT JOIN ct_article_in_journal ON ct_publications.publication_id = ct_article_in_journal.article_in_journal_id "
|
||||||
+ "LEFT JOIN ct_expertise ON ct_publications.publication_id = ct_expertise.expertise_id "
|
// + "LEFT JOIN ct_expertise ON ct_publications.publication_id = ct_expertise.expertise_id "
|
||||||
+ "LEFT JOIN ct_inproceedings ON ct_publications.publication_id = ct_inproceedings.inproceedings_id "
|
// + "LEFT JOIN ct_inproceedings ON ct_publications.publication_id = ct_inproceedings.inproceedings_id "
|
||||||
+ "LEFT JOIN ct_internet_article ON ct_publications.publication_id = ct_internet_article.internet_article_id "
|
// + "LEFT JOIN ct_internet_article ON ct_publications.publication_id = ct_internet_article.internet_article_id "
|
||||||
+ "LEFT JOIN ct_unpublished ON ct_publications.publication_id = ct_unpublished.unpublished_id "
|
// + "LEFT JOIN ct_unpublished ON ct_publications.publication_id = ct_unpublished.unpublished_id "
|
||||||
+ "LEFT JOIN ct_grey_literature ON ct_unpublished.unpublished_id = ct_grey_literature.grey_literature_id "
|
// + "LEFT JOIN ct_grey_literature ON ct_unpublished.unpublished_id = ct_grey_literature.grey_literature_id "
|
||||||
+ "WHERE parent_id IN (SELECT object_id FROM cat_object_category_map WHERE category_id = ?) AND version = 'live' "
|
// + "WHERE parent_id IN (SELECT object_id FROM cat_object_category_map WHERE category_id = ?) AND version = 'live' "
|
||||||
);
|
// );
|
||||||
|
|
||||||
availableYearsQueryStatement = connection.prepareStatement(
|
availableYearsQueryStatement = connection.prepareStatement(
|
||||||
"SELECT DISTINCT year "
|
"SELECT DISTINCT year "
|
||||||
+ "FROM cms_items "
|
+ "FROM cms_items "
|
||||||
|
|
@ -248,9 +263,59 @@ public class PublicationList extends AbstractComponent {
|
||||||
final Element sortElem = filtersElem.newChildElement("sort");
|
final Element sortElem = filtersElem.newChildElement("sort");
|
||||||
|
|
||||||
final PreparedStatement publicationsQueryStatement;
|
final PreparedStatement publicationsQueryStatement;
|
||||||
|
final StringBuffer whereBuffer = new StringBuffer();
|
||||||
final int page;
|
final int page;
|
||||||
final int offset;
|
final int offset;
|
||||||
try {
|
try {
|
||||||
|
final String titleFilter = request.getParameter("title");
|
||||||
|
final Integer yearFilter;
|
||||||
|
if (request.getParameter("yearOfPublication") == null) {
|
||||||
|
yearFilter = null;
|
||||||
|
} else if (request.getParameter("yearOfPublication").matches("\\d*")) {
|
||||||
|
yearFilter = Integer.parseInt(request.getParameter(
|
||||||
|
"yearOfPublication"));
|
||||||
|
} else {
|
||||||
|
yearFilter = null;
|
||||||
|
}
|
||||||
|
final String authorsFilter = request.getParameter("authorsStr");
|
||||||
|
if ((titleFilter != null && !titleFilter.trim().isEmpty())
|
||||||
|
|| yearFilter != null
|
||||||
|
|| (authorsFilter != null && !authorsFilter.trim().isEmpty())) {
|
||||||
|
|
||||||
|
whereBuffer.append(" AND ");
|
||||||
|
}
|
||||||
|
if (titleFilter != null && !titleFilter.trim().isEmpty()) {
|
||||||
|
whereBuffer
|
||||||
|
.append("LOWER(title) LIKE '%%")
|
||||||
|
.append(titleFilter.toLowerCase())
|
||||||
|
.append("%%' ");
|
||||||
|
final Element titleFilterElem = filtersElem
|
||||||
|
.newChildElement("title");
|
||||||
|
titleFilterElem.setText(titleFilter);
|
||||||
|
}
|
||||||
|
if (yearFilter != null) {
|
||||||
|
if (titleFilter != null && !titleFilter.trim().isEmpty()) {
|
||||||
|
whereBuffer.append(" AND ");
|
||||||
|
}
|
||||||
|
whereBuffer.append("year = ").append(yearFilter);
|
||||||
|
final Element yearFilterElem = filtersElem
|
||||||
|
.newChildElement("year");
|
||||||
|
yearFilterElem.setText(Integer.toString(yearFilter));
|
||||||
|
}
|
||||||
|
if (authorsFilter != null && !authorsFilter.trim().isEmpty()) {
|
||||||
|
if ((titleFilter != null && !titleFilter.trim().isEmpty())
|
||||||
|
|| yearFilter != null) {
|
||||||
|
whereBuffer.append(" AND ");
|
||||||
|
}
|
||||||
|
whereBuffer
|
||||||
|
.append("LOWER(authors) LIKE '%%")
|
||||||
|
.append(authorsFilter.toLowerCase())
|
||||||
|
.append("%%' ");
|
||||||
|
final Element authorsFilterElem = filtersElem
|
||||||
|
.newChildElement("authors");
|
||||||
|
authorsFilterElem.setText(authorsFilter);
|
||||||
|
}
|
||||||
|
|
||||||
final String orderByParam;
|
final String orderByParam;
|
||||||
if (request.getParameter("sort") == null) {
|
if (request.getParameter("sort") == null) {
|
||||||
orderByParam = "yearDesc";
|
orderByParam = "yearDesc";
|
||||||
|
|
@ -279,6 +344,7 @@ public class PublicationList extends AbstractComponent {
|
||||||
|
|
||||||
publicationsQueryStatement = connection
|
publicationsQueryStatement = connection
|
||||||
.prepareStatement(String.format(PUBLIATIONS_QUERY_TEMPLATE,
|
.prepareStatement(String.format(PUBLIATIONS_QUERY_TEMPLATE,
|
||||||
|
whereBuffer.toString(),
|
||||||
orderBy));
|
orderBy));
|
||||||
|
|
||||||
publicationsQueryStatement.setString(1, categoryId);
|
publicationsQueryStatement.setString(1, categoryId);
|
||||||
|
|
@ -316,6 +382,11 @@ public class PublicationList extends AbstractComponent {
|
||||||
|
|
||||||
final Element paginatorElem = listElem.newChildElement("paginator");
|
final Element paginatorElem = listElem.newChildElement("paginator");
|
||||||
|
|
||||||
|
final PreparedStatement countPublicationsQueryStatement = connection
|
||||||
|
.prepareStatement(String.format(
|
||||||
|
COUNT_PUBLICATIONS_QUERY_TEMPLATE,
|
||||||
|
whereBuffer.toString()));
|
||||||
|
|
||||||
countPublicationsQueryStatement.setString(1, categoryId);
|
countPublicationsQueryStatement.setString(1, categoryId);
|
||||||
final ResultSet countResultSet = countPublicationsQueryStatement
|
final ResultSet countResultSet = countPublicationsQueryStatement
|
||||||
.executeQuery();
|
.executeQuery();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue