From 01374e5502adf4a5273eebb92207b69350921b4d Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Thu, 31 Oct 2013 15:08:58 -0400 Subject: [PATCH 1/6] updates for individuals via solr field options Conflicts: webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java --- .../how-to-create-firefox-profile.txt | 4 +- .../IndividualsViaSolrQueryOptions.java | 124 ++++++++++++++++++ .../fields/IndividualsViaVClassOptions.java | 4 +- 3 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java diff --git a/utilities/testrunner/selenium/how-to-create-firefox-profile.txt b/utilities/testrunner/selenium/how-to-create-firefox-profile.txt index 0c5af1d1d..03007d63f 100644 --- a/utilities/testrunner/selenium/how-to-create-firefox-profile.txt +++ b/utilities/testrunner/selenium/how-to-create-firefox-profile.txt @@ -1,3 +1,3 @@ -Here is an excellent description of how to create a Firefox profile for use when running Selenium tests. - +Here is an excellent description of how to create a Firefox profile for use when running Selenium tests. + http://girliemangalo.wordpress.com/2009/02/05/creating-firefox-profile-for-your-selenium-rc-tests/ \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java new file mode 100644 index 000000000..fc9527297 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java @@ -0,0 +1,124 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.SolrServer; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.common.SolrDocument; +import org.apache.solr.common.SolrDocumentList; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; +import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; + +/* + * This runs a solr query to get individuals of a certain class instead of relying on the dao classes. + * Also it gets individuals that belong to the most specific type(s) specified. + */ +public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions implements FieldOptions { + private Log log = LogFactory.getLog(IndividualsViaSolrQueryOptions.class); + + private ServletContext servletContext; + public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { + super(vclassURIs); + this.servletContext = context; + } + + @Override + protected Map getIndividualsForClass(String vclassURI, WebappDaoFactory wDaoFact ){ + Map individualMap = new HashMap(); + try { + SolrServer solrServer = SolrSetup.getSolrServer(servletContext); + + //solr query for type count. + SolrQuery query = new SolrQuery(); + if( VitroVocabulary.OWL_THING.equals( vclassURI )){ + query.setQuery( "*:*" ); + }else{ + query.setQuery( VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS + ":" + vclassURI); + } + query.setStart(0) + .setRows(1000); + query.setFields(VitroSearchTermNames.URI); // fields to retrieve + + QueryResponse rsp = solrServer.query(query); + SolrDocumentList docs = rsp.getResults(); + long found = docs.getNumFound(); + if(found > 0) { + for (SolrDocument doc : docs) { + try { + String uri = doc.get(VitroSearchTermNames.URI).toString(); + Individual individual = wDaoFact.getIndividualDao().getIndividualByURI(uri); + if (individual == null) { + log.debug("No individual for search document with uri = " + uri); + } else { + individualMap.put(individual.getURI(), individual); + log.debug("Adding individual " + uri + " to individual list"); + } + } + catch(Exception ex) { + log.error("An error occurred retrieving the individual solr query resutls", ex); + } + } + } + + } catch(Exception ex) { + log.error("Error occurred in executing solr query ", ex); + } + return individualMap; + } + + @Override + public Map getOptions( + EditConfigurationVTwo editConfig, + String fieldName, + WebappDaoFactory wDaoFact) throws Exception { + + Map individualMap = new HashMap(); + + for( String vclassURI : vclassURIs){ + individualMap.putAll( getIndividualsForClass( vclassURI, wDaoFact) ); + } + + //sort the individuals + List individuals = new ArrayList(); + individuals.addAll(individualMap.values()); + Collections.sort(individuals); + + Map optionsMap = new HashMap(); + + if (defaultOptionLabel != null) { + optionsMap.put(LEFT_BLANK, defaultOptionLabel); + } + + if (individuals.size() == 0) { + //return empty map, unlike individualsViaVclass + return optionsMap ; + } else { + for (Individual ind : individuals) { + if (ind.getURI() != null) { + optionsMap.put(ind.getURI(), ind.getName().trim()); + } + } + } + return optionsMap; + + } + + +} + + diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaVClassOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaVClassOptions.java index cebc7d23e..741624e5a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaVClassOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaVClassOptions.java @@ -18,8 +18,8 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTw public class IndividualsViaVClassOptions implements FieldOptions { public static final String LEFT_BLANK = ""; - private List vclassURIs; - private String defaultOptionLabel; + protected List vclassURIs; + protected String defaultOptionLabel; public IndividualsViaVClassOptions(String ... vclassURIs) throws Exception { super(); From 6a1c67a81da7f7bc01c9f36e978cdbceb149f461 Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Wed, 30 Oct 2013 16:33:33 -0400 Subject: [PATCH 2/6] updates for deletion and setting up method of getting field options for individuals with a certain most specific type Conflicts: webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java --- .../IndividualsViaSolrQueryOptions.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java index fc9527297..ef1dd3c7c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java @@ -3,6 +3,10 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields; import java.util.ArrayList; import java.util.Collections; +<<<<<<< HEAD +======= +import java.util.Comparator; +>>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,9 +22,20 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import edu.cornell.mannlib.vitro.webapp.beans.Individual; +<<<<<<< HEAD import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +======= +import edu.cornell.mannlib.vitro.webapp.beans.VClass; +import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; +import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultObjectPropertyFormGenerator; +>>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; @@ -31,9 +46,18 @@ import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions implements FieldOptions { private Log log = LogFactory.getLog(IndividualsViaSolrQueryOptions.class); +<<<<<<< HEAD private ServletContext servletContext; public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { super(vclassURIs); +======= + public static final String LEFT_BLANK = ""; + private List vclassURIs; + private String defaultOptionLabel; + private ServletContext servletContext; + public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { + super(); +>>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type this.servletContext = context; } @@ -50,6 +74,7 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions }else{ query.setQuery( VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS + ":" + vclassURI); } +<<<<<<< HEAD query.setStart(0) .setRows(1000); query.setFields(VitroSearchTermNames.URI); // fields to retrieve @@ -72,6 +97,20 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions catch(Exception ex) { log.error("An error occurred retrieving the individual solr query resutls", ex); } +======= + query.setRows(0); + QueryResponse rsp = solrServer.query(query); + SolrDocumentList docs = rsp.getResults(); + long found = docs.getNumFound(); + for (SolrDocument doc : docs) { + String uri = doc.get(VitroSearchTermNames.URI).toString(); + Individual individual = wDaoFact.getIndividualDao().getIndividualByURI(uri); + if (individual == null) { + log.debug("No individual for search document with uri = " + uri); + } else { + individualMap.put(individual.getURI(), individual); + log.debug("Adding individual " + uri + " to individual list"); +>>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type } } @@ -89,7 +128,11 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions Map individualMap = new HashMap(); +<<<<<<< HEAD for( String vclassURI : vclassURIs){ +======= + for( String vclassURI : this.vclassURIs){ +>>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type individualMap.putAll( getIndividualsForClass( vclassURI, wDaoFact) ); } From cbfb90415964896813d37b88dd4d9ee23be828ec Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Thu, 31 Oct 2013 15:08:58 -0400 Subject: [PATCH 3/6] updates for individuals via solr field options Conflicts: webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java --- .../IndividualsViaSolrQueryOptions.java | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java index ef1dd3c7c..dabbb8db0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java @@ -4,9 +4,12 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields; import java.util.ArrayList; import java.util.Collections; <<<<<<< HEAD +<<<<<<< HEAD ======= import java.util.Comparator; >>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type +======= +>>>>>>> 15e0fc0... updates for individuals via solr field options import java.util.HashMap; import java.util.List; import java.util.Map; @@ -23,19 +26,23 @@ import org.apache.solr.common.SolrDocumentList; import edu.cornell.mannlib.vitro.webapp.beans.Individual; <<<<<<< HEAD +<<<<<<< HEAD import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; ======= import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; +======= +>>>>>>> 15e0fc0... updates for individuals via solr field options import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; -import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +<<<<<<< HEAD import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultObjectPropertyFormGenerator; >>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type +======= +>>>>>>> 15e0fc0... updates for individuals via solr field options import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; @@ -46,6 +53,7 @@ import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions implements FieldOptions { private Log log = LogFactory.getLog(IndividualsViaSolrQueryOptions.class); +<<<<<<< HEAD <<<<<<< HEAD private ServletContext servletContext; public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { @@ -58,6 +66,11 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { super(); >>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type +======= + private ServletContext servletContext; + public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { + super(vclassURIs); +>>>>>>> 15e0fc0... updates for individuals via solr field options this.servletContext = context; } @@ -75,10 +88,14 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions query.setQuery( VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS + ":" + vclassURI); } <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 15e0fc0... updates for individuals via solr field options query.setStart(0) .setRows(1000); query.setFields(VitroSearchTermNames.URI); // fields to retrieve +<<<<<<< HEAD QueryResponse rsp = solrServer.query(query); SolrDocumentList docs = rsp.getResults(); long found = docs.getNumFound(); @@ -111,6 +128,26 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions individualMap.put(individual.getURI(), individual); log.debug("Adding individual " + uri + " to individual list"); >>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type +======= + QueryResponse rsp = solrServer.query(query); + SolrDocumentList docs = rsp.getResults(); + long found = docs.getNumFound(); + if(found > 0) { + for (SolrDocument doc : docs) { + try { + String uri = doc.get(VitroSearchTermNames.URI).toString(); + Individual individual = wDaoFact.getIndividualDao().getIndividualByURI(uri); + if (individual == null) { + log.debug("No individual for search document with uri = " + uri); + } else { + individualMap.put(individual.getURI(), individual); + log.debug("Adding individual " + uri + " to individual list"); + } + } + catch(Exception ex) { + log.error("An error occurred retrieving the individual solr query resutls", ex); + } +>>>>>>> 15e0fc0... updates for individuals via solr field options } } @@ -128,11 +165,15 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions Map individualMap = new HashMap(); +<<<<<<< HEAD <<<<<<< HEAD for( String vclassURI : vclassURIs){ ======= for( String vclassURI : this.vclassURIs){ >>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type +======= + for( String vclassURI : vclassURIs){ +>>>>>>> 15e0fc0... updates for individuals via solr field options individualMap.putAll( getIndividualsForClass( vclassURI, wDaoFact) ); } From 7022df040b1406d1eb76097562c7833b7da53f15 Mon Sep 17 00:00:00 2001 From: j2blake Date: Fri, 1 Nov 2013 10:36:56 -0400 Subject: [PATCH 4/6] VIVO-428 corrected method calls left over from the first proof of concept. --- .../webapp/controller/freemarker/ImageUploadController.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java index b15b402ad..537b4573c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ImageUploadController.java @@ -102,7 +102,6 @@ public class ImageUploadController extends FreemarkerHttpServlet { private static final String URL_HERE = UrlBuilder.getUrl("/uploadImages"); - private static final String TEXT_BUNDLE = "imageUpload"; private static final String TEXT_STRING_UPLOAD_TITLE = "upload_page_title"; private static final String TEXT_STRING_UPLOAD_TITLE_WITH_NAME = "upload_page_title_with_name"; private static final String TEXT_STRING_REPLACE_TITLE = "replace_page_title"; @@ -572,10 +571,10 @@ public class ImageUploadController extends FreemarkerHttpServlet { if (entity != null) { String name = entity.getName(); if (name != null) { - return I18n.text(req, TEXT_BUNDLE, nameTitleKey, name); + return I18n.text(req, nameTitleKey, name); } } - return I18n.text(req, TEXT_BUNDLE, noNameTitleKey); + return I18n.text(req, noNameTitleKey); } /** From 9cee22ace97c76ac545e097f5f4546c69608555a Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Fri, 1 Nov 2013 10:41:22 -0400 Subject: [PATCH 5/6] updates to individual solr field options --- .../IndividualsViaSolrQueryOptions.java | 84 ------------------- 1 file changed, 84 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java index dabbb8db0..fc9527297 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java @@ -3,13 +3,6 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields; import java.util.ArrayList; import java.util.Collections; -<<<<<<< HEAD -<<<<<<< HEAD -======= -import java.util.Comparator; ->>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type -======= ->>>>>>> 15e0fc0... updates for individuals via solr field options import java.util.HashMap; import java.util.List; import java.util.Map; @@ -25,24 +18,9 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import edu.cornell.mannlib.vitro.webapp.beans.Individual; -<<<<<<< HEAD -<<<<<<< HEAD import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; -======= -import edu.cornell.mannlib.vitro.webapp.beans.VClass; -import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; -======= ->>>>>>> 15e0fc0... updates for individuals via solr field options -import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; -<<<<<<< HEAD -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultObjectPropertyFormGenerator; ->>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type -======= ->>>>>>> 15e0fc0... updates for individuals via solr field options import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; @@ -53,24 +31,9 @@ import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions implements FieldOptions { private Log log = LogFactory.getLog(IndividualsViaSolrQueryOptions.class); -<<<<<<< HEAD -<<<<<<< HEAD private ServletContext servletContext; public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { super(vclassURIs); -======= - public static final String LEFT_BLANK = ""; - private List vclassURIs; - private String defaultOptionLabel; - private ServletContext servletContext; - public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { - super(); ->>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type -======= - private ServletContext servletContext; - public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { - super(vclassURIs); ->>>>>>> 15e0fc0... updates for individuals via solr field options this.servletContext = context; } @@ -87,15 +50,10 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions }else{ query.setQuery( VitroSearchTermNames.MOST_SPECIFIC_TYPE_URIS + ":" + vclassURI); } -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 15e0fc0... updates for individuals via solr field options query.setStart(0) .setRows(1000); query.setFields(VitroSearchTermNames.URI); // fields to retrieve -<<<<<<< HEAD QueryResponse rsp = solrServer.query(query); SolrDocumentList docs = rsp.getResults(); long found = docs.getNumFound(); @@ -114,40 +72,6 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions catch(Exception ex) { log.error("An error occurred retrieving the individual solr query resutls", ex); } -======= - query.setRows(0); - QueryResponse rsp = solrServer.query(query); - SolrDocumentList docs = rsp.getResults(); - long found = docs.getNumFound(); - for (SolrDocument doc : docs) { - String uri = doc.get(VitroSearchTermNames.URI).toString(); - Individual individual = wDaoFact.getIndividualDao().getIndividualByURI(uri); - if (individual == null) { - log.debug("No individual for search document with uri = " + uri); - } else { - individualMap.put(individual.getURI(), individual); - log.debug("Adding individual " + uri + " to individual list"); ->>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type -======= - QueryResponse rsp = solrServer.query(query); - SolrDocumentList docs = rsp.getResults(); - long found = docs.getNumFound(); - if(found > 0) { - for (SolrDocument doc : docs) { - try { - String uri = doc.get(VitroSearchTermNames.URI).toString(); - Individual individual = wDaoFact.getIndividualDao().getIndividualByURI(uri); - if (individual == null) { - log.debug("No individual for search document with uri = " + uri); - } else { - individualMap.put(individual.getURI(), individual); - log.debug("Adding individual " + uri + " to individual list"); - } - } - catch(Exception ex) { - log.error("An error occurred retrieving the individual solr query resutls", ex); - } ->>>>>>> 15e0fc0... updates for individuals via solr field options } } @@ -165,15 +89,7 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions Map individualMap = new HashMap(); -<<<<<<< HEAD -<<<<<<< HEAD for( String vclassURI : vclassURIs){ -======= - for( String vclassURI : this.vclassURIs){ ->>>>>>> d82c894... updates for deletion and setting up method of getting field options for individuals with a certain most specific type -======= - for( String vclassURI : vclassURIs){ ->>>>>>> 15e0fc0... updates for individuals via solr field options individualMap.putAll( getIndividualsForClass( vclassURI, wDaoFact) ); } From 20278bde17129e5c69ecdca6583a1551e18938f9 Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Fri, 1 Nov 2013 11:23:48 -0400 Subject: [PATCH 6/6] updates to allow individuals with most specific type in dropdown to exclude subject and any objects for object property --- .../IndividualsViaObjectPropetyOptions.java | 26 ++--------- .../IndividualsViaSolrQueryOptions.java | 40 ++++++++++++++--- .../vitro/webapp/utils/fields/FieldUtils.java | 44 +++++++++++++++++++ 3 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/fields/FieldUtils.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaObjectPropetyOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaObjectPropetyOptions.java index fdc1f008a..fcc1453b6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaObjectPropetyOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaObjectPropetyOptions.java @@ -19,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.VClassDao; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.utils.fields.FieldUtils; public class IndividualsViaObjectPropetyOptions implements FieldOptions { @@ -100,7 +101,7 @@ public class IndividualsViaObjectPropetyOptions implements FieldOptions { List stmts = subject.getObjectPropertyStatements(); - individuals = removeIndividualsAlreadyInRange( + individuals = FieldUtils.removeIndividualsAlreadyInRange( individuals, stmts, predicateUri, objectUri); // Collections.sort(individuals,new compareIndividualsByName());a @@ -162,28 +163,7 @@ public class IndividualsViaObjectPropetyOptions implements FieldOptions { return filteredVClassesURIs; } - // copied from OptionsForPropertyTag.java in the thought that class may be deprecated - private static List removeIndividualsAlreadyInRange(List individuals, - List stmts, String predicateUri, String objectUriBeingEdited){ - HashSet range = new HashSet(); - - for(ObjectPropertyStatement ops : stmts){ - if( ops.getPropertyURI().equals(predicateUri)) - range.add( ops.getObjectURI() ); - } - - int removeCount=0; - ListIterator it = individuals.listIterator(); - while(it.hasNext()){ - Individual ind = it.next(); - if( range.contains( ind.getURI()) && !(ind.getURI().equals(objectUriBeingEdited)) ) { - it.remove(); - ++removeCount; - } - } - - return individuals; - } + public Comparator getCustomComparator() { return null; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java index fc9527297..75cac343e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/fields/IndividualsViaSolrQueryOptions.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.ListIterator; import java.util.Map; import javax.servlet.ServletContext; @@ -18,11 +19,13 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup; +import edu.cornell.mannlib.vitro.webapp.utils.fields.FieldUtils; /* * This runs a solr query to get individuals of a certain class instead of relying on the dao classes. @@ -32,9 +35,15 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions private Log log = LogFactory.getLog(IndividualsViaSolrQueryOptions.class); private ServletContext servletContext; - public IndividualsViaSolrQueryOptions(ServletContext context, String ... vclassURIs) throws Exception { + private String subjectUri; + private String predicateUri; + private String objectUri; + public IndividualsViaSolrQueryOptions(ServletContext context, String inputSubjectUri, String inputPredicateUri, String inputObjectUri, String ... vclassURIs) throws Exception { super(vclassURIs); this.servletContext = context; + this.subjectUri = inputSubjectUri; + this.predicateUri = inputPredicateUri; + this.objectUri = inputObjectUri; } @Override @@ -96,8 +105,18 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions //sort the individuals List individuals = new ArrayList(); individuals.addAll(individualMap.values()); - Collections.sort(individuals); + + //Here we will remove individuals already in the range + Individual subject = wDaoFact.getIndividualDao().getIndividualByURI(subjectUri); + List stmts = subject.getObjectPropertyStatements(); + individuals = FieldUtils.removeIndividualsAlreadyInRange( + individuals, stmts, predicateUri, objectUri); + //Also remove subjectUri if it + individuals = removeSubjectUri(individuals, subjectUri); + //sort the list + Collections.sort(individuals); + //set up the options map Map optionsMap = new HashMap(); if (defaultOptionLabel != null) { @@ -117,8 +136,19 @@ public class IndividualsViaSolrQueryOptions extends IndividualsViaVClassOptions return optionsMap; } - - -} + + //TODO: Check if this can be done simply by reference + private List removeSubjectUri(List individuals, + String subjectUri) { + ListIterator it = individuals.listIterator(); + while(it.hasNext()){ + Individual ind = it.next(); + if( ind.getURI().equals(subjectUri)) { + it.remove(); + } + } + return individuals; + } +} \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/fields/FieldUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/fields/FieldUtils.java new file mode 100644 index 000000000..15a042232 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/fields/FieldUtils.java @@ -0,0 +1,44 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.utils.fields; + +import java.util.HashSet; +import java.util.List; +import java.util.ListIterator; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; + +public class FieldUtils { + + private static final Log log = LogFactory.getLog(FieldUtils.class); + + + // copied from OptionsForPropertyTag.java in the thought that class may be deprecated + public static List removeIndividualsAlreadyInRange(List individuals, + List stmts, String predicateUri, String objectUriBeingEdited){ + HashSet range = new HashSet(); + + for(ObjectPropertyStatement ops : stmts){ + if( ops.getPropertyURI().equals(predicateUri)) + range.add( ops.getObjectURI() ); + } + + int removeCount=0; + ListIterator it = individuals.listIterator(); + while(it.hasNext()){ + Individual ind = it.next(); + if( range.contains( ind.getURI()) && !(ind.getURI().equals(objectUriBeingEdited)) ) { + it.remove(); + ++removeCount; + } + } + + return individuals; + } + + + +}