diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java index 2a91220aa..84fc3d935 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/Individual.java @@ -109,6 +109,7 @@ public interface Individual extends ResourceBean, Comparable { * This is crap. It was put in so IndividualFiltering could filter object properties properly, * but what we really need is either: filters have a reference to a webappDaoFactory, or * all ObjectPropertyStatements are resolved when they are created. See VIVO-946 and VIVO-984. + * @param list */ - void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt); + void resolveAsFauxPropertyStatements(List list); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java index 2c6ffbe54..94b3262e6 100755 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/IndividualImpl.java @@ -347,7 +347,7 @@ public class IndividualImpl extends BaseResourceBean implements Individual, Comp } @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { + public void resolveAsFauxPropertyStatements(List list) { // No webappDaoFactory, so nothing to do. } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java index 7a18d6ea3..daa0064c0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDao.java @@ -62,6 +62,6 @@ public interface ObjectPropertyStatementDao { * If that is so, then set the domain and range (and the domainURI and * rangeURI) of the property of this statement to match the faux property. */ - void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt); + void resolveAsFauxPropertyStatements(List list); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java index 4931eb433..0ab92bef7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java @@ -20,7 +20,6 @@ import org.apache.commons.logging.LogFactory; import org.json.JSONException; import org.json.JSONObject; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.RequestedAction; import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean; import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel; import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; @@ -185,9 +184,7 @@ public class IndividualFiltering implements Individual { if (opStmts == null) { return Collections.emptyList(); } - for(ObjectPropertyStatement opStmt: opStmts) { - _innerIndividual.resolveAsFauxPropertyStatement(opStmt); - } + _innerIndividual.resolveAsFauxPropertyStatements(opStmts); ArrayList filtered = new ArrayList(); Filter.filter(opStmts, _filters.getObjectPropertyStatementFilter(), filtered); return filtered; @@ -563,8 +560,8 @@ public class IndividualFiltering implements Individual { @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { - _innerIndividual.resolveAsFauxPropertyStatement(stmt); + public void resolveAsFauxPropertyStatements(List list) { + _innerIndividual.resolveAsFauxPropertyStatements(list); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java index 3d7b7e980..23f92be2a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/ObjectPropertyStatementDaoFiltering.java @@ -36,11 +36,9 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec private List filterAndWrapList(List list){ - if( ( list ) != null ){ - for (ObjectPropertyStatement stmt: list) { - innerObjectPropertyStatementDao.resolveAsFauxPropertyStatement(stmt); - } - + if( ( list ) != null ){ + innerObjectPropertyStatementDao.resolveAsFauxPropertyStatements(list); + ArrayList ctemp = new ArrayList(); Filter.filter(list,filters.getObjectPropertyStatementFilter(),ctemp); @@ -142,8 +140,8 @@ class ObjectPropertyStatementDaoFiltering extends BaseFiltering implements Objec @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { - innerObjectPropertyStatementDao.resolveAsFauxPropertyStatement(stmt); + public void resolveAsFauxPropertyStatements(List list) { + innerObjectPropertyStatementDao.resolveAsFauxPropertyStatements(list); } } \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/FauxPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/FauxPropertyDaoJena.java index dfed53060..083fd013c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/FauxPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/FauxPropertyDaoJena.java @@ -99,12 +99,12 @@ public class FauxPropertyDaoJena extends JenaBaseDao implements FauxPropertyDao @Override public List getFauxPropertiesForBaseUri(String uri) { - try (LockedOntModel displayModel = models.getDisplayModel().read()) { - if (uri == null) { - return Collections.emptyList(); - } + if (uri == null) { + return Collections.emptyList(); + } - List contextUris = new ArrayList<>(); + try (LockedOntModel displayModel = models.getDisplayModel().read()) { + Set contextUris = new HashSet<>(); ResIterator contextResources = displayModel .listSubjectsWithProperty(CONFIG_CONTEXT_FOR, createResource(uri)); @@ -131,11 +131,11 @@ public class FauxPropertyDaoJena extends JenaBaseDao implements FauxPropertyDao */ @Override public FauxProperty getFauxPropertyFromContextUri(String contextUri) { - try (LockedOntModel displayModel = models.getDisplayModel().read()) { - if (contextUri == null) { - return null; - } + if (contextUri == null) { + return null; + } + try (LockedOntModel displayModel = models.getDisplayModel().read()) { OntResource context = displayModel.createOntResource(contextUri); if (!displayModel.contains(context, RDF.type, CONFIG_CONTEXT)) { log.debug("'" + contextUri + "' is not a CONFIG_CONTEXT"); @@ -634,5 +634,4 @@ public class FauxPropertyDaoJena extends JenaBaseDao implements FauxPropertyDao } } - } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualJena.java index 17d78eb5d..ba490899e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualJena.java @@ -618,8 +618,8 @@ public class IndividualJena extends IndividualImpl implements Individual { } @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { - webappDaoFactory.getObjectPropertyStatementDao().resolveAsFauxPropertyStatement(stmt); + public void resolveAsFauxPropertyStatements(List list) { + webappDaoFactory.getObjectPropertyStatementDao().resolveAsFauxPropertyStatements(list); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java index f76cb8775..098065ed6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java @@ -1088,8 +1088,8 @@ public class IndividualSDB extends IndividualImpl implements Individual { } @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { - webappDaoFactory.getObjectPropertyStatementDao().resolveAsFauxPropertyStatement(stmt); + public void resolveAsFauxPropertyStatements(List list) { + webappDaoFactory.getObjectPropertyStatementDao().resolveAsFauxPropertyStatements(list); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java index 895c0a439..bff157dac 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoJena.java @@ -559,47 +559,72 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec * accordingly. */ @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { - if (stmt == null) { + public void resolveAsFauxPropertyStatements(List list) { + if (list == null || list.size() == 0) { return; } - ObjectProperty prop = obtainObjectPropertyFromStatement(stmt); - if (prop == null) { - return; - } + Map> fauxPropMap = new HashMap>(); + Map> subjectTypeMap = new HashMap>(); + Map> objectTypeMap = new HashMap>(); - List fauxProps = getWebappDaoFactory() - .getFauxPropertyDao() - .getFauxPropertiesForBaseUri(prop.getURI()); - if (fauxProps.isEmpty()) { - return; - } + for (ObjectPropertyStatement stmt : list) { + ObjectProperty prop = obtainObjectPropertyFromStatement(stmt); + if (prop != null) { + List fauxProps = fauxPropMap.get(prop.getURI()); + if (fauxProps == null) { + fauxProps = getWebappDaoFactory() + .getFauxPropertyDao() + .getFauxPropertiesForBaseUri(prop.getURI()); - Individual subject = obtainSubjectFromStatement(stmt); - if (subject == null) { - return; - } + fauxPropMap.put(prop.getURI(), fauxProps); + } - Individual object = obtainObjectFromStatement(stmt); - if (object == null) { - return; - } + if (fauxProps != null && !fauxProps.isEmpty()) { + List subjectTypes = null; + List objectTypes = null; - List subjectTypes = subject.getVClasses(); - List objectTypes = object.getVClasses(); - for (FauxProperty fauxProp : fauxProps) { - VClass subjectType = selectType(subjectTypes, - fauxProp.getDomainURI()); - VClass objectType = selectType(objectTypes, fauxProp.getRangeURI()); - if (subjectType != null && objectType != null) { - prop.setDomainVClass(subjectType); - prop.setDomainVClassURI(subjectType.getURI()); - prop.setRangeVClass(objectType); - prop.setRangeVClassURI(objectType.getURI()); - return; - } - } + if (stmt.getSubjectURI() != null) { + subjectTypes = subjectTypeMap.get(stmt.getSubjectURI()); + } + + if (stmt.getObjectURI() != null) { + objectTypes = objectTypeMap.get(stmt.getObjectURI()); + } + + if (subjectTypes == null) { + Individual subject = obtainSubjectFromStatement(stmt); + if (subject != null) { + subjectTypes = subject.getVClasses(); + subjectTypeMap.put(stmt.getSubjectURI(), subjectTypes); + } + } + + if (objectTypes == null) { + Individual object = obtainObjectFromStatement(stmt); + if (object != null) { + objectTypes = object.getVClasses(); + objectTypeMap.put(stmt.getObjectURI(), objectTypes); + } + } + + if (subjectTypes != null && objectTypes != null) { + for (FauxProperty fauxProp : fauxProps) { + VClass subjectType = selectType(subjectTypes, fauxProp.getDomainURI()); + VClass objectType = selectType(objectTypes, fauxProp.getRangeURI()); + + if (subjectType != null && objectType != null) { + prop.setDomainVClass(subjectType); + prop.setDomainVClassURI(subjectType.getURI()); + prop.setRangeVClass(objectType); + prop.setRangeVClassURI(objectType.getURI()); + break; + } + } + } + } + } + } } private ObjectProperty obtainObjectPropertyFromStatement( diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/beans/IndividualStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/beans/IndividualStub.java index f13789d1c..c4801ad69 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/beans/IndividualStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/beans/IndividualStub.java @@ -209,7 +209,7 @@ public class IndividualStub implements Individual { } @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { + public void resolveAsFauxPropertyStatements(List list) { // Nothing to do: no associated webappDaoFactory } diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDaoStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDaoStub.java index ad8fb408e..1dbb4ffae 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDaoStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/ObjectPropertyStatementDaoStub.java @@ -231,9 +231,9 @@ public class ObjectPropertyStatementDaoStub implements } @Override - public void resolveAsFauxPropertyStatement(ObjectPropertyStatement stmt) { + public void resolveAsFauxPropertyStatements(List list) { throw new RuntimeException( - "ObjectPropertyStatementDaoStub.resolveAsFauxPropertyStatement() not implemented."); + "ObjectPropertyStatementDaoStub.resolveAsFauxPropertyStatements() not implemented."); } }