[VIVO-1031] Rework the resolve faux properties method so that it is much faster for logged in users.
This commit is contained in:
parent
f37f115160
commit
2f6489610c
1 changed files with 77 additions and 29 deletions
|
@ -565,12 +565,14 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, List<FauxProperty>> fauxPropMap = new HashMap<String, List<FauxProperty>>();
|
Map<String, List<FauxProperty>> fauxPropMap = new HashMap<String, List<FauxProperty>>();
|
||||||
Map<String, List<VClass>> subjectTypeMap = new HashMap<String, List<VClass>>();
|
Map<String, VClass> vclassTypeMap = new HashMap<String, VClass>();
|
||||||
Map<String, List<VClass>> objectTypeMap = new HashMap<String, List<VClass>>();
|
Map<String, String> indVClassURIMap = new HashMap<String, String>();
|
||||||
|
Map<String, List<String>> superClassMap = new HashMap<String, List<String>>();
|
||||||
|
|
||||||
for (ObjectPropertyStatement stmt : list) {
|
for (ObjectPropertyStatement stmt : list) {
|
||||||
ObjectProperty prop = obtainObjectPropertyFromStatement(stmt);
|
ObjectProperty prop = obtainObjectPropertyFromStatement(stmt);
|
||||||
if (prop != null) {
|
if (prop != null) {
|
||||||
|
FauxProperty useThisFaux = null;
|
||||||
List<FauxProperty> fauxProps = fauxPropMap.get(prop.getURI());
|
List<FauxProperty> fauxProps = fauxPropMap.get(prop.getURI());
|
||||||
if (fauxProps == null) {
|
if (fauxProps == null) {
|
||||||
fauxProps = getWebappDaoFactory()
|
fauxProps = getWebappDaoFactory()
|
||||||
|
@ -581,47 +583,93 @@ public class ObjectPropertyStatementDaoJena extends JenaBaseDao implements Objec
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fauxProps != null && !fauxProps.isEmpty()) {
|
if (fauxProps != null && !fauxProps.isEmpty()) {
|
||||||
List<VClass> subjectTypes = null;
|
String domainVClassURI = indVClassURIMap.get(stmt.getSubjectURI());
|
||||||
List<VClass> objectTypes = null;
|
String rangeVClassURI = indVClassURIMap.get(stmt.getObjectURI());
|
||||||
|
|
||||||
if (stmt.getSubjectURI() != null) {
|
if (domainVClassURI == null) {
|
||||||
subjectTypes = subjectTypeMap.get(stmt.getSubjectURI());
|
Individual subject = stmt.getSubject();
|
||||||
}
|
|
||||||
|
|
||||||
if (stmt.getObjectURI() != null) {
|
|
||||||
objectTypes = objectTypeMap.get(stmt.getObjectURI());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (subjectTypes == null) {
|
|
||||||
Individual subject = obtainSubjectFromStatement(stmt);
|
|
||||||
if (subject != null) {
|
if (subject != null) {
|
||||||
subjectTypes = subject.getVClasses();
|
domainVClassURI = subject.getVClassURI();
|
||||||
subjectTypeMap.put(stmt.getSubjectURI(), subjectTypes);
|
indVClassURIMap.put(subject.getURI(), domainVClassURI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objectTypes == null) {
|
if (rangeVClassURI == null) {
|
||||||
Individual object = obtainObjectFromStatement(stmt);
|
Individual object = stmt.getObject();
|
||||||
if (object != null) {
|
if (object != null) {
|
||||||
objectTypes = object.getVClasses();
|
rangeVClassURI = object.getVClassURI();
|
||||||
objectTypeMap.put(stmt.getObjectURI(), objectTypes);
|
indVClassURIMap.put(object.getURI(), rangeVClassURI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subjectTypes != null && objectTypes != null) {
|
if (domainVClassURI != null && rangeVClassURI != null) {
|
||||||
for (FauxProperty fauxProp : fauxProps) {
|
for (FauxProperty fauxProp : fauxProps) {
|
||||||
VClass subjectType = selectType(subjectTypes, fauxProp.getDomainURI());
|
if (domainVClassURI.equals(fauxProp.getDomainVClassURI()) &&
|
||||||
VClass objectType = selectType(objectTypes, fauxProp.getRangeURI());
|
rangeVClassURI.equals(fauxProp.getRangeVClassURI())) {
|
||||||
|
useThisFaux = fauxProp;
|
||||||
if (subjectType != null && objectType != null) {
|
|
||||||
prop.setDomainVClass(subjectType);
|
|
||||||
prop.setDomainVClassURI(subjectType.getURI());
|
|
||||||
prop.setRangeVClass(objectType);
|
|
||||||
prop.setRangeVClassURI(objectType.getURI());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (useThisFaux == null) {
|
||||||
|
List<String> domainSuperClasses = superClassMap.get(domainVClassURI);
|
||||||
|
List<String> rangeSuperClasses = superClassMap.get(rangeVClassURI);
|
||||||
|
|
||||||
|
if (domainSuperClasses == null) {
|
||||||
|
domainSuperClasses = getWebappDaoFactory().getVClassDao().getAllSuperClassURIs(domainVClassURI);
|
||||||
|
if (!domainSuperClasses.contains(domainVClassURI)) {
|
||||||
|
domainSuperClasses.add(domainVClassURI);
|
||||||
|
}
|
||||||
|
superClassMap.put(domainVClassURI, domainSuperClasses);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rangeSuperClasses == null) {
|
||||||
|
rangeSuperClasses = getWebappDaoFactory().getVClassDao().getAllSuperClassURIs(rangeVClassURI);
|
||||||
|
if (!rangeSuperClasses.contains(rangeVClassURI)) {
|
||||||
|
rangeSuperClasses.add(rangeVClassURI);
|
||||||
|
}
|
||||||
|
superClassMap.put(rangeVClassURI, rangeSuperClasses);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (domainSuperClasses != null && domainSuperClasses.size() > 0) {
|
||||||
|
if (rangeSuperClasses != null && rangeSuperClasses.size() > 0) {
|
||||||
|
for (FauxProperty fauxProp : fauxProps) {
|
||||||
|
if (domainSuperClasses.contains(fauxProp.getDomainVClassURI()) &&
|
||||||
|
rangeSuperClasses.contains(fauxProp.getRangeVClassURI())) {
|
||||||
|
useThisFaux = fauxProp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useThisFaux != null) {
|
||||||
|
String fauxDomainVClassURI = useThisFaux.getDomainVClassURI();
|
||||||
|
VClass fauxDomainVClass = vclassTypeMap.get(fauxDomainVClassURI);
|
||||||
|
if (fauxDomainVClass == null) {
|
||||||
|
fauxDomainVClass = getWebappDaoFactory().getVClassDao().getVClassByURI(fauxDomainVClassURI);
|
||||||
|
vclassTypeMap.put(fauxDomainVClassURI, fauxDomainVClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
String fauxRangeVClassURI = useThisFaux.getRangeVClassURI();
|
||||||
|
VClass fauxRangeVClass = vclassTypeMap.get(fauxRangeVClassURI);
|
||||||
|
if (fauxRangeVClass == null) {
|
||||||
|
fauxRangeVClass = getWebappDaoFactory().getVClassDao().getVClassByURI(fauxRangeVClassURI);
|
||||||
|
vclassTypeMap.put(fauxRangeVClassURI, fauxRangeVClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fauxDomainVClass != null && fauxDomainVClassURI != null) {
|
||||||
|
prop.setDomainVClass(fauxDomainVClass);
|
||||||
|
prop.setDomainVClassURI(fauxDomainVClassURI);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fauxRangeVClass != null && fauxRangeVClassURI != null) {
|
||||||
|
prop.setRangeVClass(fauxRangeVClass);
|
||||||
|
prop.setRangeVClassURI(fauxRangeVClassURI);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue