VIVO-1319 Remove dependency on sourceforge.net JSON parser. (#60)
* VIVO-1246 improve the ConfigurationBeanLoader: Add cardinality parameters minOccurs and maxOccurs Create README.md document in the edu.cornell.mannlib.vitro.webapp.utils.configuration package Split large class of unit tests into separate classes by functionality * VIVO-1247, remove duplicate code used with ConfigurationBeanLoader. Now that the @Property annotation includes cardinality parameters, we can remove a lot of duplicate code. * VIVO-1246 Move unit tests to the new location. * VIVO-1246 The documentation was in the wrong place. * Ignore all /bin/ directories under eclipse * First set of unit tests, along with enhancements to the stubs. * Clean up the unit tests with more expressive power. * VIVO-1319 Full tests on the controller output formats. * Create a Jackson-based quote(), to replace the net.sf.json-based quote() * Eliminate the use of net.sf.json.util.JSONUtils * Use Jackson JSON library instead of net.sf.json JSONNode, JSONArray, JSONObject become JsonNode, ArrayNode, and ObjectNode. No direct replacement for HSONSerializer, so create JacksonUtils Some of the message signatures are different, so adjust accordingly.
This commit is contained in:
parent
a8bd8829db
commit
3829f48b0b
42 changed files with 3013 additions and 318 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -2,7 +2,6 @@
|
||||||
/.classpath
|
/.classpath
|
||||||
/.project
|
/.project
|
||||||
/.settings
|
/.settings
|
||||||
/bin/
|
|
||||||
/webapp/config/deploy.properties
|
/webapp/config/deploy.properties
|
||||||
/webapp/config/build.properties
|
/webapp/config/build.properties
|
||||||
/webapp/config/runtime.properties
|
/webapp/config/runtime.properties
|
||||||
|
@ -22,3 +21,4 @@ utilities/sdb_to_tdb/.work
|
||||||
**/.settings
|
**/.settings
|
||||||
**/.classpath
|
**/.classpath
|
||||||
**/.project
|
**/.project
|
||||||
|
**/bin/
|
||||||
|
|
|
@ -7,8 +7,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -21,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,9 +60,9 @@ public class ListClassGroupsController extends FreemarkerHttpServlet {
|
||||||
publicName = "(unnamed group)";
|
publicName = "(unnamed group)";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='./editForm?uri="+URLEncoder.encode(vcg.getURI())+"&controller=Classgroup'>"+publicName+"</a>") + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='./editForm?uri="+URLEncoder.encode(vcg.getURI())+"&controller=Classgroup'>"+publicName+"</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "{ \"name\": " + JSONUtils.quote(publicName) + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote(publicName) + ", ";
|
||||||
}
|
}
|
||||||
Integer t;
|
Integer t;
|
||||||
|
|
||||||
|
@ -77,16 +76,16 @@ public class ListClassGroupsController extends FreemarkerHttpServlet {
|
||||||
VClass vcw = classIt.next();
|
VClass vcw = classIt.next();
|
||||||
if (vcw.getName() != null && vcw.getURI() != null) {
|
if (vcw.getName() != null && vcw.getURI() != null) {
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='vclassEdit?uri="+URLEncoder.encode(vcw.getURI())+"'>"+vcw.getName()+"</a>") + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='vclassEdit?uri="+URLEncoder.encode(vcw.getURI())+"'>"+vcw.getName()+"</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "" + JSONUtils.quote(vcw.getName()) + ", ";
|
json += "" + JacksonUtils.quote(vcw.getName()) + ", ";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
json += "\"\", ";
|
json += "\"\", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
String shortDefStr = (vcw.getShortDef() == null) ? "" : vcw.getShortDef();
|
String shortDefStr = (vcw.getShortDef() == null) ? "" : vcw.getShortDef();
|
||||||
json += "\"data\": { \"shortDef\": " + JSONUtils.quote(shortDefStr) + "}, \"children\": [] ";
|
json += "\"data\": { \"shortDef\": " + JacksonUtils.quote(shortDefStr) + "}, \"children\": [] ";
|
||||||
if (classIt.hasNext())
|
if (classIt.hasNext())
|
||||||
json += "} , ";
|
json += "} , ";
|
||||||
else
|
else
|
||||||
|
|
|
@ -10,8 +10,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -28,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DatatypeDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.DatatypeDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
||||||
|
|
||||||
public class ListDatatypePropertiesController extends FreemarkerHttpServlet {
|
public class ListDatatypePropertiesController extends FreemarkerHttpServlet {
|
||||||
|
@ -113,12 +112,12 @@ public class ListDatatypePropertiesController extends FreemarkerHttpServlet {
|
||||||
String nameStr = prop.getPickListName()==null ? prop.getName()==null ? prop.getURI()==null ? "(no name)" : prop.getURI() : prop.getName() : prop.getPickListName();
|
String nameStr = prop.getPickListName()==null ? prop.getName()==null ? prop.getURI()==null ? "(no name)" : prop.getURI() : prop.getName() : prop.getPickListName();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='datapropEdit?uri="+ URLEncoder.encode(prop.getURI())+"'>" + nameStr + "</a>") + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='datapropEdit?uri="+ URLEncoder.encode(prop.getURI())+"'>" + nameStr + "</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "{ \"name\": " + JSONUtils.quote(nameStr) + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote(nameStr) + ", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
json += "\"data\": { \"internalName\": " + JSONUtils.quote(prop.getPickListName()) + ", ";
|
json += "\"data\": { \"internalName\": " + JacksonUtils.quote(prop.getPickListName()) + ", ";
|
||||||
|
|
||||||
/* VClass vc = null;
|
/* VClass vc = null;
|
||||||
String domainStr="";
|
String domainStr="";
|
||||||
|
@ -138,15 +137,15 @@ public class ListDatatypePropertiesController extends FreemarkerHttpServlet {
|
||||||
dpLangNeut = prop;
|
dpLangNeut = prop;
|
||||||
}
|
}
|
||||||
String domainStr = getVClassNameFromURI(dpLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
String domainStr = getVClassNameFromURI(dpLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
||||||
json += "\"domainVClass\": " + JSONUtils.quote(domainStr) + ", " ;
|
json += "\"domainVClass\": " + JacksonUtils.quote(domainStr) + ", " ;
|
||||||
|
|
||||||
Datatype rangeDatatype = dDao.getDatatypeByURI(prop.getRangeDatatypeURI());
|
Datatype rangeDatatype = dDao.getDatatypeByURI(prop.getRangeDatatypeURI());
|
||||||
String rangeDatatypeStr = (rangeDatatype==null)?prop.getRangeDatatypeURI():rangeDatatype.getName();
|
String rangeDatatypeStr = (rangeDatatype==null)?prop.getRangeDatatypeURI():rangeDatatype.getName();
|
||||||
json += "\"rangeVClass\": " + JSONUtils.quote(rangeDatatypeStr) + ", " ;
|
json += "\"rangeVClass\": " + JacksonUtils.quote(rangeDatatypeStr) + ", " ;
|
||||||
|
|
||||||
if (prop.getGroupURI() != null) {
|
if (prop.getGroupURI() != null) {
|
||||||
PropertyGroup pGroup = pgDao.getGroupByURI(prop.getGroupURI());
|
PropertyGroup pGroup = pgDao.getGroupByURI(prop.getGroupURI());
|
||||||
json += "\"group\": " + JSONUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName()) + " } } " ;
|
json += "\"group\": " + JacksonUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName()) + " } } " ;
|
||||||
} else {
|
} else {
|
||||||
json += "\"group\": \"unspecified\" } }" ;
|
json += "\"group\": \"unspecified\" } }" ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,19 +2,12 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
import java.text.Collator;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -23,15 +16,12 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.AuthorizationReques
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.FauxProperty;
|
import edu.cornell.mannlib.vitro.webapp.beans.FauxProperty;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.FauxPropertyDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.FauxPropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
|
||||||
|
|
||||||
public class ListFauxPropertiesController extends FreemarkerHttpServlet {
|
public class ListFauxPropertiesController extends FreemarkerHttpServlet {
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -24,6 +22,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
|
|
||||||
public class ListPropertyGroupsController extends FreemarkerHttpServlet {
|
public class ListPropertyGroupsController extends FreemarkerHttpServlet {
|
||||||
|
|
||||||
|
@ -62,9 +61,9 @@ public class ListPropertyGroupsController extends FreemarkerHttpServlet {
|
||||||
publicName = "(unnamed group)";
|
publicName = "(unnamed group)";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='./editForm?uri="+URLEncoder.encode(pg.getURI(),"UTF-8")+"&controller=PropertyGroup'>" + publicName + "</a>") + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='./editForm?uri="+URLEncoder.encode(pg.getURI(),"UTF-8")+"&controller=PropertyGroup'>" + publicName + "</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "{ \"name\": " + JSONUtils.quote(publicName) + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote(publicName) + ", ";
|
||||||
}
|
}
|
||||||
Integer t;
|
Integer t;
|
||||||
|
|
||||||
|
@ -89,10 +88,10 @@ public class ListPropertyGroupsController extends FreemarkerHttpServlet {
|
||||||
}
|
}
|
||||||
if (prop.getURI() != null) {
|
if (prop.getURI() != null) {
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='" + controllerStr
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='" + controllerStr
|
||||||
+ "?uri="+URLEncoder.encode(prop.getURI(),"UTF-8")+"'>"+ nameStr +"</a>") + ", ";
|
+ "?uri="+URLEncoder.encode(prop.getURI(),"UTF-8")+"'>"+ nameStr +"</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += JSONUtils.quote(nameStr) + ", ";
|
json += JacksonUtils.quote(nameStr) + ", ";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
json += "\"\", ";
|
json += "\"\", ";
|
||||||
|
|
|
@ -11,8 +11,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -32,6 +30,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
||||||
|
|
||||||
public class ListPropertyWebappsController extends FreemarkerHttpServlet {
|
public class ListPropertyWebappsController extends FreemarkerHttpServlet {
|
||||||
|
@ -154,27 +153,27 @@ public class ListPropertyWebappsController extends FreemarkerHttpServlet {
|
||||||
String propNameStr = ShowObjectPropertyHierarchyController.getDisplayLabel(prop);
|
String propNameStr = ShowObjectPropertyHierarchyController.getDisplayLabel(prop);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='./propertyEdit?uri="+URLEncoder.encode(prop.getURI())+"'>"
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='./propertyEdit?uri="+URLEncoder.encode(prop.getURI())+"'>"
|
||||||
+ propNameStr + "</a>") + ", ";
|
+ propNameStr + "</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "{ \"name\": \"" + propNameStr + "\", ";
|
json += "{ \"name\": \"" + propNameStr + "\", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
json += "\"data\": { \"internalName\": " + JSONUtils.quote(prop.getLocalNameWithPrefix()) + ", ";
|
json += "\"data\": { \"internalName\": " + JacksonUtils.quote(prop.getLocalNameWithPrefix()) + ", ";
|
||||||
|
|
||||||
ObjectProperty opLangNeut = opDaoLangNeut.getObjectPropertyByURI(prop.getURI());
|
ObjectProperty opLangNeut = opDaoLangNeut.getObjectPropertyByURI(prop.getURI());
|
||||||
if(opLangNeut == null) {
|
if(opLangNeut == null) {
|
||||||
opLangNeut = prop;
|
opLangNeut = prop;
|
||||||
}
|
}
|
||||||
String domainStr = getVClassNameFromURI(opLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
String domainStr = getVClassNameFromURI(opLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
||||||
json += "\"domainVClass\": " + JSONUtils.quote(domainStr) + ", " ;
|
json += "\"domainVClass\": " + JacksonUtils.quote(domainStr) + ", " ;
|
||||||
|
|
||||||
String rangeStr = getVClassNameFromURI(opLangNeut.getRangeVClassURI(), vcDao, vcDaoLangNeut);
|
String rangeStr = getVClassNameFromURI(opLangNeut.getRangeVClassURI(), vcDao, vcDaoLangNeut);
|
||||||
json += "\"rangeVClass\": " + JSONUtils.quote(rangeStr) + ", " ;
|
json += "\"rangeVClass\": " + JacksonUtils.quote(rangeStr) + ", " ;
|
||||||
|
|
||||||
if (prop.getGroupURI() != null) {
|
if (prop.getGroupURI() != null) {
|
||||||
PropertyGroup pGroup = pgDao.getGroupByURI(prop.getGroupURI());
|
PropertyGroup pGroup = pgDao.getGroupByURI(prop.getGroupURI());
|
||||||
json += "\"group\": " + JSONUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName()) + " } } " ;
|
json += "\"group\": " + JacksonUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName()) + " } } " ;
|
||||||
} else {
|
} else {
|
||||||
json += "\"group\": \"unspecified\" } }" ;
|
json += "\"group\": \"unspecified\" } }" ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -26,6 +24,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.PropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
|
|
||||||
|
|
||||||
public class ListVClassWebappsController extends FreemarkerHttpServlet {
|
public class ListVClassWebappsController extends FreemarkerHttpServlet {
|
||||||
|
@ -90,15 +89,15 @@ public class ListVClassWebappsController extends FreemarkerHttpServlet {
|
||||||
if ( (ontologyURI==null) || ( (ontologyURI != null) && (cls.getNamespace()!=null) && (ontologyURI.equals(cls.getNamespace())) ) ) {
|
if ( (ontologyURI==null) || ( (ontologyURI != null) && (cls.getNamespace()!=null) && (ontologyURI.equals(cls.getNamespace())) ) ) {
|
||||||
if (cls.getName() != null)
|
if (cls.getName() != null)
|
||||||
try {
|
try {
|
||||||
json += "{ \"name\": " + JSONUtils.quote("<a href='./vclassEdit?uri="+URLEncoder.encode(cls.getURI(),"UTF-8")+"'>"+cls.getPickListName()+"</a>") + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote("<a href='./vclassEdit?uri="+URLEncoder.encode(cls.getURI(),"UTF-8")+"'>"+cls.getPickListName()+"</a>") + ", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
json += "{ \"name\": " + JSONUtils.quote(cls.getPickListName()) + ", ";
|
json += "{ \"name\": " + JacksonUtils.quote(cls.getPickListName()) + ", ";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
json += "{ \"name\": \"\"";
|
json += "{ \"name\": \"\"";
|
||||||
String shortDef = (cls.getShortDef() == null) ? "" : cls.getShortDef();
|
String shortDef = (cls.getShortDef() == null) ? "" : cls.getShortDef();
|
||||||
|
|
||||||
json += "\"data\": { \"shortDef\": " + JSONUtils.quote(shortDef) + ", ";
|
json += "\"data\": { \"shortDef\": " + JacksonUtils.quote(shortDef) + ", ";
|
||||||
|
|
||||||
// get group name
|
// get group name
|
||||||
WebappDaoFactory wadf = vreq.getUnfilteredWebappDaoFactory();
|
WebappDaoFactory wadf = vreq.getUnfilteredWebappDaoFactory();
|
||||||
|
@ -113,7 +112,7 @@ public class ListVClassWebappsController extends FreemarkerHttpServlet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
json += "\"classGroup\": " + JSONUtils.quote(groupName) + ", ";
|
json += "\"classGroup\": " + JacksonUtils.quote(groupName) + ", ";
|
||||||
|
|
||||||
// get ontology name
|
// get ontology name
|
||||||
OntologyDao ontDao = wadf.getOntologyDao();
|
OntologyDao ontDao = wadf.getOntologyDao();
|
||||||
|
@ -122,7 +121,7 @@ public class ListVClassWebappsController extends FreemarkerHttpServlet {
|
||||||
if (ont != null && ont.getName() != null) {
|
if (ont != null && ont.getName() != null) {
|
||||||
ontName = ont.getName();
|
ontName = ont.getName();
|
||||||
}
|
}
|
||||||
json += "\"ontology\": " + JSONUtils.quote(ontName) + "} }";
|
json += "\"ontology\": " + JacksonUtils.quote(ontName) + "} }";
|
||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,8 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.vocabulary.OWL;
|
import org.apache.jena.vocabulary.OWL;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
|
||||||
|
@ -29,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
|
|
||||||
|
|
||||||
public class ShowClassHierarchyController extends FreemarkerHttpServlet {
|
public class ShowClassHierarchyController extends FreemarkerHttpServlet {
|
||||||
|
@ -196,16 +194,16 @@ public class ShowClassHierarchyController extends FreemarkerHttpServlet {
|
||||||
tempString += "}, { \"name\": ";
|
tempString += "}, { \"name\": ";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
tempString += JSONUtils.quote("<a href='vclassEdit?uri=" +
|
tempString += JacksonUtils.quote("<a href='vclassEdit?uri=" +
|
||||||
URLEncoder.encode(vcw.getURI(),"UTF-8") + "'>" +
|
URLEncoder.encode(vcw.getURI(),"UTF-8") + "'>" +
|
||||||
vcw.getPickListName() + "</a>") +", ";
|
vcw.getPickListName() + "</a>") +", ";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
tempString += JSONUtils.quote(((vcw.getPickListName() == null)
|
tempString += JacksonUtils.quote(((vcw.getPickListName() == null)
|
||||||
? "" : vcw.getPickListName())) + ", ";
|
? "" : vcw.getPickListName())) + ", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
String shortDef = ((vcw.getShortDef() == null) ? "" : vcw.getShortDef()) ;
|
String shortDef = ((vcw.getShortDef() == null) ? "" : vcw.getShortDef()) ;
|
||||||
tempString += "\"data\": { \"shortDef\": " + JSONUtils.quote(shortDef) + ", ";
|
tempString += "\"data\": { \"shortDef\": " + JacksonUtils.quote(shortDef) + ", ";
|
||||||
|
|
||||||
// Get group name if it exists
|
// Get group name if it exists
|
||||||
VClassGroupDao groupDao= wadf.getVClassGroupDao();
|
VClassGroupDao groupDao= wadf.getVClassGroupDao();
|
||||||
|
@ -218,7 +216,7 @@ public class ShowClassHierarchyController extends FreemarkerHttpServlet {
|
||||||
groupName = classGroup.getPublicName();
|
groupName = classGroup.getPublicName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tempString += "\"classGroup\": " + JSONUtils.quote(
|
tempString += "\"classGroup\": " + JacksonUtils.quote(
|
||||||
(groupName == null) ? "" : groupName) + ", ";
|
(groupName == null) ? "" : groupName) + ", ";
|
||||||
// Get ontology name
|
// Get ontology name
|
||||||
OntologyDao ontDao = wadf.getOntologyDao();
|
OntologyDao ontDao = wadf.getOntologyDao();
|
||||||
|
@ -227,7 +225,7 @@ public class ShowClassHierarchyController extends FreemarkerHttpServlet {
|
||||||
if (ont != null && ont.getName() != null) {
|
if (ont != null && ont.getName() != null) {
|
||||||
ontName = ont.getName();
|
ontName = ont.getName();
|
||||||
}
|
}
|
||||||
tempString += "\"ontology\": " + JSONUtils.quote(
|
tempString += "\"ontology\": " + JacksonUtils.quote(
|
||||||
(ontName == null) ? "" : ontName) + "}, \"children\": [";
|
(ontName == null) ? "" : ontName) + "}, \"children\": [";
|
||||||
|
|
||||||
previous_posn = position;
|
previous_posn = position;
|
||||||
|
|
|
@ -9,8 +9,6 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -27,6 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DatatypeDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.DatatypeDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
||||||
|
|
||||||
public class ShowDataPropertyHierarchyController extends FreemarkerHttpServlet {
|
public class ShowDataPropertyHierarchyController extends FreemarkerHttpServlet {
|
||||||
|
@ -211,11 +210,11 @@ public class ShowDataPropertyHierarchyController extends FreemarkerHttpServlet {
|
||||||
? dp.getURI() == null
|
? dp.getURI() == null
|
||||||
? "(no name)" : dp.getURI() : dp.getName() : dp.getPickListName();
|
? "(no name)" : dp.getURI() : dp.getName() : dp.getPickListName();
|
||||||
|
|
||||||
tempString += JSONUtils.quote(
|
tempString += JacksonUtils.quote(
|
||||||
"<a href='datapropEdit?uri=" + URLEncoder.encode(
|
"<a href='datapropEdit?uri=" + URLEncoder.encode(
|
||||||
dp.getURI()) + "'>" + nameStr + "</a>") + ", ";
|
dp.getURI()) + "'>" + nameStr + "</a>") + ", ";
|
||||||
|
|
||||||
tempString += "\"data\": { \"internalName\": " + JSONUtils.quote(
|
tempString += "\"data\": { \"internalName\": " + JacksonUtils.quote(
|
||||||
dp.getPickListName()) + ", ";
|
dp.getPickListName()) + ", ";
|
||||||
|
|
||||||
DataProperty dpLangNeut = dpDaoLangNeut.getDataPropertyByURI(dp.getURI());
|
DataProperty dpLangNeut = dpDaoLangNeut.getDataPropertyByURI(dp.getURI());
|
||||||
|
@ -225,20 +224,20 @@ public class ShowDataPropertyHierarchyController extends FreemarkerHttpServlet {
|
||||||
String domainStr = getVClassNameFromURI(dpLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
String domainStr = getVClassNameFromURI(dpLangNeut.getDomainVClassURI(), vcDao, vcDaoLangNeut);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
tempString += "\"domainVClass\": " + JSONUtils.quote(domainStr) + ", " ;
|
tempString += "\"domainVClass\": " + JacksonUtils.quote(domainStr) + ", " ;
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
tempString += "\"domainVClass\": \"\",";
|
tempString += "\"domainVClass\": \"\",";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Datatype rangeDatatype = dDao.getDatatypeByURI(dp.getRangeDatatypeURI());
|
Datatype rangeDatatype = dDao.getDatatypeByURI(dp.getRangeDatatypeURI());
|
||||||
String rangeDatatypeStr = (rangeDatatype==null)?dp.getRangeDatatypeURI():rangeDatatype.getName();
|
String rangeDatatypeStr = (rangeDatatype==null)?dp.getRangeDatatypeURI():rangeDatatype.getName();
|
||||||
tempString += "\"rangeVClass\": " + JSONUtils.quote((rangeDatatypeStr != null) ? rangeDatatypeStr : "") + ", " ;
|
tempString += "\"rangeVClass\": " + JacksonUtils.quote((rangeDatatypeStr != null) ? rangeDatatypeStr : "") + ", " ;
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
tempString += "\"rangeVClass\": \"\",";
|
tempString += "\"rangeVClass\": \"\",";
|
||||||
}
|
}
|
||||||
if (dp.getGroupURI() != null) {
|
if (dp.getGroupURI() != null) {
|
||||||
PropertyGroup pGroup = pgDao.getGroupByURI(dp.getGroupURI());
|
PropertyGroup pGroup = pgDao.getGroupByURI(dp.getGroupURI());
|
||||||
tempString += "\"group\": " + JSONUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName());
|
tempString += "\"group\": " + JacksonUtils.quote((pGroup == null) ? "unknown group" : pGroup.getName());
|
||||||
} else {
|
} else {
|
||||||
tempString += "\"group\": \"unspecified\"";
|
tempString += "\"group\": \"unspecified\"";
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,8 +12,6 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.util.JSONUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -28,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.Tem
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
import edu.cornell.mannlib.vitro.webapp.web.URLEncoder;
|
||||||
|
|
||||||
public class ShowObjectPropertyHierarchyController extends FreemarkerHttpServlet {
|
public class ShowObjectPropertyHierarchyController extends FreemarkerHttpServlet {
|
||||||
|
@ -210,11 +209,11 @@ public class ShowObjectPropertyHierarchyController extends FreemarkerHttpServlet
|
||||||
|
|
||||||
String nameStr = getDisplayLabel(op) == null ? "(no name)" : getDisplayLabel(op);
|
String nameStr = getDisplayLabel(op) == null ? "(no name)" : getDisplayLabel(op);
|
||||||
|
|
||||||
tempString += JSONUtils.quote(
|
tempString += JacksonUtils.quote(
|
||||||
"<a href='propertyEdit?uri=" + URLEncoder.encode(
|
"<a href='propertyEdit?uri=" + URLEncoder.encode(
|
||||||
op.getURI()) + "'>" + nameStr + "</a>") + ", ";
|
op.getURI()) + "'>" + nameStr + "</a>") + ", ";
|
||||||
|
|
||||||
tempString += "\"data\": { \"internalName\": " + JSONUtils.quote(
|
tempString += "\"data\": { \"internalName\": " + JacksonUtils.quote(
|
||||||
op.getLocalNameWithPrefix()) + ", ";
|
op.getLocalNameWithPrefix()) + ", ";
|
||||||
|
|
||||||
ObjectProperty opLangNeut = opDaoLangNeut.getObjectPropertyByURI(op.getURI());
|
ObjectProperty opLangNeut = opDaoLangNeut.getObjectPropertyByURI(op.getURI());
|
||||||
|
@ -225,18 +224,18 @@ public class ShowObjectPropertyHierarchyController extends FreemarkerHttpServlet
|
||||||
String rangeStr = getVClassNameFromURI(opLangNeut.getRangeVClassURI(), vcDao, vcDaoLangNeut);
|
String rangeStr = getVClassNameFromURI(opLangNeut.getRangeVClassURI(), vcDao, vcDaoLangNeut);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
tempString += "\"domainVClass\": " + JSONUtils.quote(domainStr) + ", " ;
|
tempString += "\"domainVClass\": " + JacksonUtils.quote(domainStr) + ", " ;
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
tempString += "\"domainVClass\": \"\",";
|
tempString += "\"domainVClass\": \"\",";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
tempString += "\"rangeVClass\": " + JSONUtils.quote(rangeStr) + ", " ;
|
tempString += "\"rangeVClass\": " + JacksonUtils.quote(rangeStr) + ", " ;
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
tempString += "\"rangeVClass\": \"\",";
|
tempString += "\"rangeVClass\": \"\",";
|
||||||
}
|
}
|
||||||
if (op.getGroupURI() != null) {
|
if (op.getGroupURI() != null) {
|
||||||
PropertyGroup pGroup = pgDao.getGroupByURI(op.getGroupURI());
|
PropertyGroup pGroup = pgDao.getGroupByURI(op.getGroupURI());
|
||||||
tempString += "\"group\": " + JSONUtils.quote(
|
tempString += "\"group\": " + JacksonUtils.quote(
|
||||||
(pGroup == null) ? "unknown group" : pGroup.getName());
|
(pGroup == null) ? "unknown group" : pGroup.getName());
|
||||||
} else {
|
} else {
|
||||||
tempString += "\"group\": \"unspecified\"";
|
tempString += "\"group\": \"unspecified\"";
|
||||||
|
|
|
@ -12,12 +12,8 @@ import java.util.Map;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import net.sf.json.JSONArray;
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -31,6 +27,10 @@ import org.apache.jena.rdf.model.Resource;
|
||||||
import org.apache.jena.rdf.model.ResourceFactory;
|
import org.apache.jena.rdf.model.ResourceFactory;
|
||||||
import org.apache.jena.vocabulary.XSD;
|
import org.apache.jena.vocabulary.XSD;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
@ -258,7 +258,7 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
|
||||||
String pageUri,
|
String pageUri,
|
||||||
OntModel queryModel) {
|
OntModel queryModel) {
|
||||||
//Create json array to be set within form specific data
|
//Create json array to be set within form specific data
|
||||||
JSONArray jsonArray = new JSONArray();
|
ArrayNode jsonArray = new ObjectMapper().createArrayNode();
|
||||||
String querystr = getExistingDataGettersQuery();
|
String querystr = getExistingDataGettersQuery();
|
||||||
//Bind pageUri to query
|
//Bind pageUri to query
|
||||||
QuerySolutionMap initialBindings = new QuerySolutionMap();
|
QuerySolutionMap initialBindings = new QuerySolutionMap();
|
||||||
|
@ -291,7 +291,7 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addJSONArrayToFormSpecificData(JSONArray jsonArray, EditConfigurationVTwo editConfig) {
|
private void addJSONArrayToFormSpecificData(ArrayNode jsonArray, EditConfigurationVTwo editConfig) {
|
||||||
HashMap<String, Object> data = editConfig.getFormSpecificData();
|
HashMap<String, Object> data = editConfig.getFormSpecificData();
|
||||||
data.put("existingPageContentUnits", jsonArray.toString());
|
data.put("existingPageContentUnits", jsonArray.toString());
|
||||||
//Experimenting with putting actual array in
|
//Experimenting with putting actual array in
|
||||||
|
@ -300,7 +300,7 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processExistingDataGetter(int counter, String dataGetterURI, String dgClassName,
|
private void processExistingDataGetter(int counter, String dataGetterURI, String dgClassName,
|
||||||
EditConfigurationVTwo editConfig, OntModel queryModel, JSONArray jsonArray, ServletContext context) {
|
EditConfigurationVTwo editConfig, OntModel queryModel, ArrayNode jsonArray, ServletContext context) {
|
||||||
ProcessDataGetterN3 pn = ProcessDataGetterN3Utils.getDataGetterProcessorN3(dgClassName, null);
|
ProcessDataGetterN3 pn = ProcessDataGetterN3Utils.getDataGetterProcessorN3(dgClassName, null);
|
||||||
|
|
||||||
//Add N3 Optional as well
|
//Add N3 Optional as well
|
||||||
|
@ -323,10 +323,10 @@ public class ManagePageGenerator extends BaseEditConfigurationGenerator implemen
|
||||||
//including: (i) The JSON object representing the existing information to be returned to template
|
//including: (i) The JSON object representing the existing information to be returned to template
|
||||||
|
|
||||||
//Takes data getter information, packs within JSON object to send back to the form
|
//Takes data getter information, packs within JSON object to send back to the form
|
||||||
private void addDataGetterSpecificFormData(String dataGetterURI, ProcessDataGetterN3 pn, OntModel queryModel, JSONArray jsonArray, ServletContext context) {
|
private void addDataGetterSpecificFormData(String dataGetterURI, ProcessDataGetterN3 pn, OntModel queryModel, ArrayNode jsonArray, ServletContext context) {
|
||||||
JSONObject jo = pn.getExistingValuesJSON(dataGetterURI, queryModel, context);
|
ObjectNode jo = pn.getExistingValuesJSON(dataGetterURI, queryModel, context);
|
||||||
//Add dataGetterURI to jsonObject
|
//Add dataGetterURI to jsonObject
|
||||||
jo.element("URI", dataGetterURI);
|
jo.put("URI", dataGetterURI);
|
||||||
jsonArray.add(jo);
|
jsonArray.add(jo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,15 +8,14 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.JSONArray;
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
import net.sf.json.JSONSerializer;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.rdf.model.Literal;
|
import org.apache.jena.rdf.model.Literal;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.BaseEditSubmissionPreprocessorVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.BaseEditSubmissionPreprocessorVTwo;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
|
||||||
|
@ -27,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.EditConfigu
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManagePageGenerator;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3Utils;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessDataGetterN3Utils;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
|
||||||
public class ManagePagePreprocessor extends
|
public class ManagePagePreprocessor extends
|
||||||
BaseEditSubmissionPreprocessorVTwo {
|
BaseEditSubmissionPreprocessorVTwo {
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ public class ManagePagePreprocessor extends
|
||||||
private static Map<String, List<String>> transformedLiteralsFromForm = null;
|
private static Map<String, List<String>> transformedLiteralsFromForm = null;
|
||||||
private static Map<String, List<String>> urisFromForm = null;
|
private static Map<String, List<String>> urisFromForm = null;
|
||||||
private static List<String> pageContentUnits = null;//String submission from form
|
private static List<String> pageContentUnits = null;//String submission from form
|
||||||
private static List<JSONObject> pageContentUnitsJSON = null;//converted to JSON objects that can be read
|
private static List<ObjectNode> pageContentUnitsJSON = null;//converted to JSON objects that can be read
|
||||||
// String datatype
|
// String datatype
|
||||||
|
|
||||||
// Will be editing the edit configuration as well as edit submission here
|
// Will be editing the edit configuration as well as edit submission here
|
||||||
|
@ -131,7 +131,7 @@ public class ManagePagePreprocessor extends
|
||||||
private void processDataGetters() {
|
private void processDataGetters() {
|
||||||
convertToJson();
|
convertToJson();
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
for(JSONObject jsonObject:pageContentUnitsJSON) {
|
for(ObjectNode jsonObject:pageContentUnitsJSON) {
|
||||||
String dataGetterClass = getDataGetterClass(jsonObject);
|
String dataGetterClass = getDataGetterClass(jsonObject);
|
||||||
ProcessDataGetterN3 pn = ProcessDataGetterN3Utils.getDataGetterProcessorN3(dataGetterClass, jsonObject);
|
ProcessDataGetterN3 pn = ProcessDataGetterN3Utils.getDataGetterProcessorN3(dataGetterClass, jsonObject);
|
||||||
//UPDATE: using class type to indicate class type/ could also get it from
|
//UPDATE: using class type to indicate class type/ could also get it from
|
||||||
|
@ -175,12 +175,12 @@ public class ManagePagePreprocessor extends
|
||||||
|
|
||||||
private void convertToJson() {
|
private void convertToJson() {
|
||||||
//Iterate through list of inputs
|
//Iterate through list of inputs
|
||||||
pageContentUnitsJSON = new ArrayList<JSONObject>();
|
pageContentUnitsJSON = new ArrayList<ObjectNode>();
|
||||||
//page content units might return null in case self-contained template is selected
|
//page content units might return null in case self-contained template is selected
|
||||||
//otherwise there should be page content units returned from the form
|
//otherwise there should be page content units returned from the form
|
||||||
if(pageContentUnits != null) {
|
if(pageContentUnits != null) {
|
||||||
for(String pageContentUnit: pageContentUnits) {
|
for(String pageContentUnit: pageContentUnits) {
|
||||||
JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON( pageContentUnit );
|
ObjectNode jsonObject = (ObjectNode) JacksonUtils.parseJson(pageContentUnit);
|
||||||
pageContentUnitsJSON.add(jsonObject);
|
pageContentUnitsJSON.add(jsonObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,29 +190,29 @@ public class ManagePagePreprocessor extends
|
||||||
//Each field name will correspond to the names of the fileds/uris on form/literals on form
|
//Each field name will correspond to the names of the fileds/uris on form/literals on form
|
||||||
//generated here
|
//generated here
|
||||||
|
|
||||||
private void addInputsToSubmission(ProcessDataGetterN3 pn, int counter, JSONObject jsonObject) {
|
private void addInputsToSubmission(ProcessDataGetterN3 pn, int counter, ObjectNode jsonObject) {
|
||||||
List<String> literalLabels = pn.getLiteralVarNamesBase();
|
List<String> literalLabels = pn.getLiteralVarNamesBase();
|
||||||
List<String> uriLabels = pn.getUriVarNamesBase();
|
List<String> uriLabels = pn.getUriVarNamesBase();
|
||||||
|
|
||||||
for(String literalLabel:literalLabels) {
|
for(String literalLabel:literalLabels) {
|
||||||
List<String> literalValues = new ArrayList<String>();
|
List<String> literalValues = new ArrayList<String>();
|
||||||
Object jsonValue = jsonObject.get(literalLabel);
|
JsonNode jsonValue = jsonObject.get(literalLabel);
|
||||||
//Var names will depend on which data getter object this is on the page, so depends on counter
|
//Var names will depend on which data getter object this is on the page, so depends on counter
|
||||||
String submissionLiteralName = pn.getVarName(literalLabel, counter);
|
String submissionLiteralName = pn.getVarName(literalLabel, counter);
|
||||||
//Single value
|
//Single value
|
||||||
if(jsonValue instanceof String) {
|
if(jsonValue.isTextual()) {
|
||||||
//TODO: Deal with multiple submission values
|
//TODO: Deal with multiple submission values
|
||||||
//This retrieves the value for this particular json object
|
//This retrieves the value for this particular json object
|
||||||
String jsonString = jsonObject.getString(literalLabel);
|
String jsonString = jsonObject.get(literalLabel).asText();
|
||||||
jsonString = pn.replaceEncodedQuotesWithEscapedQuotes(jsonString);
|
jsonString = pn.replaceEncodedQuotesWithEscapedQuotes(jsonString);
|
||||||
literalValues.add(jsonString);
|
literalValues.add(jsonString);
|
||||||
} else if(jsonValue instanceof JSONArray) {
|
} else if(jsonValue.isArray()) {
|
||||||
JSONArray values = jsonObject.getJSONArray(literalLabel);
|
ArrayNode values = (ArrayNode) jsonObject.get(literalLabel);
|
||||||
literalValues = (List<String>) JSONSerializer.toJava(values);
|
literalValues = JacksonUtils.jsonArrayToStrings(values);
|
||||||
//Replacing encoded quotes here as well
|
//Replacing encoded quotes here as well
|
||||||
this.replaceEncodedQuotesInList(pn, literalValues);
|
this.replaceEncodedQuotesInList(pn, literalValues);
|
||||||
} else if(jsonValue instanceof Boolean) {
|
} else if(jsonValue.isBoolean()) {
|
||||||
Boolean booleanValue = jsonObject.getBoolean(literalLabel);
|
Boolean booleanValue = jsonObject.get(literalLabel).asBoolean();
|
||||||
//Adds string version
|
//Adds string version
|
||||||
literalValues.add(booleanValue.toString());
|
literalValues.add(booleanValue.toString());
|
||||||
}
|
}
|
||||||
|
@ -227,19 +227,19 @@ public class ManagePagePreprocessor extends
|
||||||
|
|
||||||
for(String uriLabel:uriLabels) {
|
for(String uriLabel:uriLabels) {
|
||||||
List<String> uriValues = new ArrayList<String>();
|
List<String> uriValues = new ArrayList<String>();
|
||||||
Object jsonValue = jsonObject.get(uriLabel);
|
JsonNode jsonValue = jsonObject.get(uriLabel);
|
||||||
//Var names will depend on which data getter object this is on the page, so depends on counter
|
//Var names will depend on which data getter object this is on the page, so depends on counter
|
||||||
String submissionUriName = pn.getVarName(uriLabel, counter);
|
String submissionUriName = pn.getVarName(uriLabel, counter);
|
||||||
//if single value, then, add to values
|
//if single value, then, add to values
|
||||||
if(jsonValue instanceof String) {
|
if(jsonValue.isTextual()) {
|
||||||
//Var names will depend on which data getter object this is on the page, so depends on counter
|
//Var names will depend on which data getter object this is on the page, so depends on counter
|
||||||
//This retrieves the value for this particular json object and adds to list
|
//This retrieves the value for this particular json object and adds to list
|
||||||
uriValues.add(jsonObject.getString(uriLabel));
|
uriValues.add(jsonObject.get(uriLabel).asText());
|
||||||
|
|
||||||
} else if(jsonValue instanceof JSONArray) {
|
} else if(jsonValue.isArray()) {
|
||||||
//multiple values
|
//multiple values
|
||||||
JSONArray values = jsonObject.getJSONArray(uriLabel);
|
ArrayNode values = (ArrayNode) jsonObject.get(uriLabel);
|
||||||
uriValues = (List<String>) JSONSerializer.toJava(values);
|
uriValues = JacksonUtils.jsonArrayToStrings(values);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//This may include JSON Objects but no way to deal with these right now
|
//This may include JSON Objects but no way to deal with these right now
|
||||||
|
@ -257,8 +257,8 @@ public class ManagePagePreprocessor extends
|
||||||
//Although this is editing an existing page, new content might have been added which would not include
|
//Although this is editing an existing page, new content might have been added which would not include
|
||||||
//existing data getter URIs, so important to check whether the key exists within the json object in the first place
|
//existing data getter URIs, so important to check whether the key exists within the json object in the first place
|
||||||
String dataGetterURISubmissionName = pn.getDataGetterVarName(counter);
|
String dataGetterURISubmissionName = pn.getDataGetterVarName(counter);
|
||||||
if(jsonObject.containsKey("URI")) {
|
if(jsonObject.has("URI")) {
|
||||||
String URIValue = jsonObject.getString("URI");
|
String URIValue = jsonObject.get("URI").asText();
|
||||||
if(URIValue != null) {
|
if(URIValue != null) {
|
||||||
log.debug("Existing URI for data getter found: " + URIValue);
|
log.debug("Existing URI for data getter found: " + URIValue);
|
||||||
submission.addUriToForm(editConfiguration, dataGetterURISubmissionName, new String[]{URIValue});
|
submission.addUriToForm(editConfiguration, dataGetterURISubmissionName, new String[]{URIValue});
|
||||||
|
@ -366,8 +366,8 @@ public class ManagePagePreprocessor extends
|
||||||
|
|
||||||
|
|
||||||
//Each JSON Object will indicate the type of the data getter within it
|
//Each JSON Object will indicate the type of the data getter within it
|
||||||
private String getDataGetterClass(JSONObject jsonObject) {
|
private String getDataGetterClass(ObjectNode jsonObject) {
|
||||||
String javaURI = jsonObject.getString("dataGetterClass");
|
String javaURI = jsonObject.get("dataGetterClass").asText();
|
||||||
return getQualifiedDataGetterName(javaURI);
|
return getQualifiedDataGetterName(javaURI);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,8 @@ import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
import net.sf.json.JSONArray;
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -23,6 +19,10 @@ import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.Resource;
|
import org.apache.jena.rdf.model.Resource;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||||
|
@ -153,10 +153,10 @@ public class ProcessClassGroupDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
||||||
JSONObject jObject = new JSONObject();
|
ObjectNode jObject = new ObjectMapper().createObjectNode();
|
||||||
jObject.element("dataGetterClass", classType);
|
jObject.put("dataGetterClass", classType);
|
||||||
jObject.element(classTypeVarBase, classType);
|
jObject.put(classTypeVarBase, classType);
|
||||||
//Get class group
|
//Get class group
|
||||||
getExistingClassGroup(dataGetterURI, jObject, queryModel);
|
getExistingClassGroup(dataGetterURI, jObject, queryModel);
|
||||||
//Get classes within class group
|
//Get classes within class group
|
||||||
|
@ -164,7 +164,7 @@ public class ProcessClassGroupDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
return jObject;
|
return jObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getExistingClassGroup(String dataGetterURI, JSONObject jObject, OntModel queryModel) {
|
private void getExistingClassGroup(String dataGetterURI, ObjectNode jObject, OntModel queryModel) {
|
||||||
String querystr = getExistingValuesClassGroup(dataGetterURI);
|
String querystr = getExistingValuesClassGroup(dataGetterURI);
|
||||||
QueryExecution qe = null;
|
QueryExecution qe = null;
|
||||||
try{
|
try{
|
||||||
|
@ -175,7 +175,7 @@ public class ProcessClassGroupDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
QuerySolution qs = results.nextSolution();
|
QuerySolution qs = results.nextSolution();
|
||||||
Resource classGroupResource = qs.getResource("classGroup");
|
Resource classGroupResource = qs.getResource("classGroup");
|
||||||
//Put both literals in existing literals
|
//Put both literals in existing literals
|
||||||
jObject.element(classGroupVarBase, classGroupResource.getURI());
|
jObject.put(classGroupVarBase, classGroupResource.getURI());
|
||||||
}
|
}
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
||||||
|
@ -186,10 +186,10 @@ public class ProcessClassGroupDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
|
|
||||||
//Assumes JSON Object received will have the class group resource URI within it
|
//Assumes JSON Object received will have the class group resource URI within it
|
||||||
//TODO: Refactor to take advantage of existing code that uses OTHER JSON library
|
//TODO: Refactor to take advantage of existing code that uses OTHER JSON library
|
||||||
protected void getExistingClassesInClassGroup(ServletContext context, String dataGetterURI, JSONObject jObject) {
|
protected void getExistingClassesInClassGroup(ServletContext context, String dataGetterURI, ObjectNode jObject) {
|
||||||
//Check for class group resource within json object
|
//Check for class group resource within json object
|
||||||
if(jObject.containsKey(classGroupVarBase)) {
|
if(jObject.has(classGroupVarBase)) {
|
||||||
String classGroupURI = jObject.getString(classGroupVarBase);
|
String classGroupURI = jObject.get(classGroupVarBase).asText();
|
||||||
//Get classes for classGroupURI and include in
|
//Get classes for classGroupURI and include in
|
||||||
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context);
|
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context);
|
||||||
VClassGroup group = vcgc.getGroup(classGroupURI);
|
VClassGroup group = vcgc.getGroup(classGroupURI);
|
||||||
|
@ -201,20 +201,21 @@ public class ProcessClassGroupDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
|
|
||||||
//JSONObject will include results JSON object that will include classes JSON Arrya as well as
|
//JSONObject will include results JSON object that will include classes JSON Arrya as well as
|
||||||
//class group information
|
//class group information
|
||||||
protected void populateClassesInClassGroupJSON(JSONObject jObject, VClassGroup group) {
|
protected void populateClassesInClassGroupJSON(ObjectNode jObject, VClassGroup group) {
|
||||||
JSONArray classes = new JSONArray();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
ArrayNode classes = mapper.createArrayNode();
|
||||||
for( VClass vc : group){
|
for( VClass vc : group){
|
||||||
JSONObject vcObj = new JSONObject();
|
ObjectNode vcObj = mapper.createObjectNode();
|
||||||
vcObj.element("name", vc.getName());
|
vcObj.put("name", vc.getName());
|
||||||
vcObj.element("URI", vc.getURI());
|
vcObj.put("URI", vc.getURI());
|
||||||
classes.add(vcObj);
|
classes.add(vcObj);
|
||||||
}
|
}
|
||||||
JSONObject results = new JSONObject();
|
ObjectNode results = mapper.createObjectNode();
|
||||||
|
|
||||||
results.element("classes", classes);
|
results.set("classes", classes);
|
||||||
results.element("classGroupName", group.getPublicName());
|
results.put("classGroupName", group.getPublicName());
|
||||||
results.element("classGroupUri", group.getURI());
|
results.put("classGroupUri", group.getURI());
|
||||||
jObject.element("results", results);
|
jObject.set("results", results);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.rdf.model.Literal;
|
import org.apache.jena.rdf.model.Literal;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
||||||
|
|
||||||
//Returns the appropriate n3 based on data getter
|
//Returns the appropriate n3 based on data getter
|
||||||
|
@ -36,7 +36,7 @@ public interface ProcessDataGetterN3 {
|
||||||
public Map<String, List<Literal>> retrieveExistingLiteralValues();
|
public Map<String, List<Literal>> retrieveExistingLiteralValues();
|
||||||
public Map<String, List<String>> retrieveExistingUriValues();
|
public Map<String, List<String>> retrieveExistingUriValues();
|
||||||
public void populateExistingValues(String dataGetterURI, int counter, OntModel queryModel);
|
public void populateExistingValues(String dataGetterURI, int counter, OntModel queryModel);
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context);
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context);
|
||||||
public String replaceEncodedQuotesWithEscapedQuotes(String inputStr);
|
public String replaceEncodedQuotesWithEscapedQuotes(String inputStr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,18 +5,18 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocess
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This class determines what n3 should be returned for a particular data getter and can be overwritten or extended in VIVO.
|
* This class determines what n3 should be returned for a particular data getter and can be overwritten or extended in VIVO.
|
||||||
*/
|
*/
|
||||||
public class ProcessDataGetterN3Utils {
|
public class ProcessDataGetterN3Utils {
|
||||||
private static final Log log = LogFactory.getLog(ProcessDataGetterN3Utils.class);
|
private static final Log log = LogFactory.getLog(ProcessDataGetterN3Utils.class);
|
||||||
|
|
||||||
public static ProcessDataGetterN3 getDataGetterProcessorN3(String dataGetterClass, JSONObject jsonObject) {
|
public static ProcessDataGetterN3 getDataGetterProcessorN3(String dataGetterClass, ObjectNode jsonObject) {
|
||||||
HashMap<String, String> map = ProcessDataGetterN3Map.getDataGetterTypeToProcessorMap();
|
HashMap<String, String> map = ProcessDataGetterN3Map.getDataGetterTypeToProcessorMap();
|
||||||
//
|
//
|
||||||
if(map.containsKey(dataGetterClass)) {
|
if(map.containsKey(dataGetterClass)) {
|
||||||
|
@ -32,7 +32,7 @@ public class ProcessDataGetterN3Utils {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ProcessDataGetterN3 instantiateClass(String processorClass, JSONObject jsonObject) {
|
private static ProcessDataGetterN3 instantiateClass(String processorClass, ObjectNode jsonObject) {
|
||||||
ProcessDataGetterN3 pn = null;
|
ProcessDataGetterN3 pn = null;
|
||||||
try {
|
try {
|
||||||
Class<?> clz = Class.forName(processorClass);
|
Class<?> clz = Class.forName(processorClass);
|
||||||
|
|
|
@ -5,13 +5,11 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocess
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
|
||||||
import net.sf.json.JSONObject;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -21,6 +19,9 @@ import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.Literal;
|
import org.apache.jena.rdf.model.Literal;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
||||||
//Returns the appropriate n3 based on data getter
|
//Returns the appropriate n3 based on data getter
|
||||||
public class ProcessFixedHTMLN3 extends ProcessDataGetterAbstract {
|
public class ProcessFixedHTMLN3 extends ProcessDataGetterAbstract {
|
||||||
|
@ -136,10 +137,10 @@ public class ProcessFixedHTMLN3 extends ProcessDataGetterAbstract {
|
||||||
//Method to create a JSON object with existing values to return to form
|
//Method to create a JSON object with existing values to return to form
|
||||||
//There may be a better way to do this without having to run the query twice
|
//There may be a better way to do this without having to run the query twice
|
||||||
//TODO: Refactor code if required
|
//TODO: Refactor code if required
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
||||||
JSONObject jObject = new JSONObject();
|
ObjectNode jObject = new ObjectMapper().createObjectNode();
|
||||||
jObject.element("dataGetterClass", classType);
|
jObject.put("dataGetterClass", classType);
|
||||||
jObject.element(classTypeVarBase, classType);
|
jObject.put(classTypeVarBase, classType);
|
||||||
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
||||||
QueryExecution qe = null;
|
QueryExecution qe = null;
|
||||||
try{
|
try{
|
||||||
|
@ -152,9 +153,9 @@ public class ProcessFixedHTMLN3 extends ProcessDataGetterAbstract {
|
||||||
Literal htmlValueLiteral = qs.getLiteral("htmlValue");
|
Literal htmlValueLiteral = qs.getLiteral("htmlValue");
|
||||||
String htmlValueString = htmlValueLiteral.getString();
|
String htmlValueString = htmlValueLiteral.getString();
|
||||||
htmlValueString = this.replaceQuotes(htmlValueString);
|
htmlValueString = this.replaceQuotes(htmlValueString);
|
||||||
jObject.element("saveToVar", saveToVarLiteral.getString());
|
jObject.put("saveToVar", saveToVarLiteral.getString());
|
||||||
//TODO: Handle single and double quotes within string and escape properlyu
|
//TODO: Handle single and double quotes within string and escape properlyu
|
||||||
jObject.element("htmlValue", htmlValueString);
|
jObject.put("htmlValue", htmlValueString);
|
||||||
}
|
}
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
||||||
|
|
|
@ -2,16 +2,14 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
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.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -19,16 +17,15 @@ import org.apache.jena.query.QueryExecutionFactory;
|
||||||
import org.apache.jena.query.QueryFactory;
|
import org.apache.jena.query.QueryFactory;
|
||||||
import org.apache.jena.query.QuerySolution;
|
import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.Literal;
|
|
||||||
import org.apache.jena.rdf.model.Resource;
|
import org.apache.jena.rdf.model.Resource;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
||||||
|
|
||||||
import net.sf.json.JSONArray;
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
import net.sf.json.JSONSerializer;
|
|
||||||
//Returns the appropriate n3 for selection of classes from within class group
|
//Returns the appropriate n3 for selection of classes from within class group
|
||||||
public class ProcessIndividualsForClassesDataGetterN3 extends ProcessClassGroupDataGetterN3 {
|
public class ProcessIndividualsForClassesDataGetterN3 extends ProcessClassGroupDataGetterN3 {
|
||||||
private static String classType = "java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter";
|
private static String classType = "java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter";
|
||||||
|
@ -174,11 +171,11 @@ public class ProcessIndividualsForClassesDataGetterN3 extends ProcessClassGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
||||||
JSONObject jObject = new JSONObject();
|
ObjectNode jObject = new ObjectMapper().createObjectNode();
|
||||||
jObject.element("dataGetterClass", classType);
|
jObject.put("dataGetterClass", classType);
|
||||||
//Update to include class type as variable
|
//Update to include class type as variable
|
||||||
jObject.element(classTypeVarBase, classType);
|
jObject.put(classTypeVarBase, classType);
|
||||||
//Get selected class group and which classes were selected
|
//Get selected class group and which classes were selected
|
||||||
getExistingClassGroupAndIndividuals(dataGetterURI, jObject, queryModel);
|
getExistingClassGroupAndIndividuals(dataGetterURI, jObject, queryModel);
|
||||||
//Get all classes within the class group
|
//Get all classes within the class group
|
||||||
|
@ -186,14 +183,14 @@ public class ProcessIndividualsForClassesDataGetterN3 extends ProcessClassGroup
|
||||||
return jObject;
|
return jObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getExistingClassGroupAndIndividuals(String dataGetterURI, JSONObject jObject, OntModel queryModel) {
|
private void getExistingClassGroupAndIndividuals(String dataGetterURI, ObjectNode jObject, OntModel queryModel) {
|
||||||
String querystr = getExistingValuesIndividualsForClasses(dataGetterURI);
|
String querystr = getExistingValuesIndividualsForClasses(dataGetterURI);
|
||||||
QueryExecution qe = null;
|
QueryExecution qe = null;
|
||||||
try{
|
try{
|
||||||
Query query = QueryFactory.create(querystr);
|
Query query = QueryFactory.create(querystr);
|
||||||
qe = QueryExecutionFactory.create(query, queryModel);
|
qe = QueryExecutionFactory.create(query, queryModel);
|
||||||
ResultSet results = qe.execSelect();
|
ResultSet results = qe.execSelect();
|
||||||
JSONArray individualsForClasses = new JSONArray();
|
ArrayNode individualsForClasses = new ObjectMapper().createArrayNode();
|
||||||
String classGroupURI = null;
|
String classGroupURI = null;
|
||||||
while( results.hasNext()){
|
while( results.hasNext()){
|
||||||
QuerySolution qs = results.nextSolution();
|
QuerySolution qs = results.nextSolution();
|
||||||
|
@ -207,9 +204,9 @@ public class ProcessIndividualsForClassesDataGetterN3 extends ProcessClassGroup
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jObject.element("classGroup", classGroupURI);
|
jObject.put("classGroup", classGroupURI);
|
||||||
//this is a json array
|
//this is a json array
|
||||||
jObject.element(individualClassVarNameBase, individualsForClasses);
|
jObject.set(individualClassVarNameBase, individualsForClasses);
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,13 +5,11 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocess
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
|
||||||
import net.sf.json.JSONObject;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -22,6 +20,9 @@ import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.Literal;
|
import org.apache.jena.rdf.model.Literal;
|
||||||
import org.apache.jena.rdf.model.Resource;
|
import org.apache.jena.rdf.model.Resource;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
||||||
//Returns the appropriate n3 based on data getter
|
//Returns the appropriate n3 based on data getter
|
||||||
public class ProcessSearchIndividualsDataGetterN3 extends ProcessDataGetterAbstract {
|
public class ProcessSearchIndividualsDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
|
@ -138,10 +139,10 @@ public class ProcessSearchIndividualsDataGetterN3 extends ProcessDataGetterAbst
|
||||||
//Method to create a JSON object with existing values to return to form
|
//Method to create a JSON object with existing values to return to form
|
||||||
//There may be a better way to do this without having to run the query twice
|
//There may be a better way to do this without having to run the query twice
|
||||||
//TODO: Refactor code if required
|
//TODO: Refactor code if required
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
||||||
JSONObject jObject = new JSONObject();
|
ObjectNode jObject = new ObjectMapper().createObjectNode();
|
||||||
jObject.element("dataGetterClass", classType);
|
jObject.put("dataGetterClass", classType);
|
||||||
jObject.element(classTypeVarBase, classType);
|
jObject.put(classTypeVarBase, classType);
|
||||||
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
||||||
QueryExecution qe = null;
|
QueryExecution qe = null;
|
||||||
try{
|
try{
|
||||||
|
@ -153,9 +154,9 @@ public class ProcessSearchIndividualsDataGetterN3 extends ProcessDataGetterAbst
|
||||||
Literal saveToVarLiteral = qs.getLiteral("saveToVar");
|
Literal saveToVarLiteral = qs.getLiteral("saveToVar");
|
||||||
Resource vclassUriResource = qs.getResource("vclassUri");
|
Resource vclassUriResource = qs.getResource("vclassUri");
|
||||||
String vclassUriString = vclassUriResource.getURI();
|
String vclassUriString = vclassUriResource.getURI();
|
||||||
jObject.element("saveToVar", saveToVarLiteral.getString());
|
jObject.put("saveToVar", saveToVarLiteral.getString());
|
||||||
//TODO: Handle single and double quotes within string and escape properlyu
|
//TODO: Handle single and double quotes within string and escape properlyu
|
||||||
jObject.element("vclassUri", vclassUriString);
|
jObject.put("vclassUri", vclassUriString);
|
||||||
}
|
}
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
log.error("Exception occurred in retrieving existing values with query " + querystr, ex);
|
||||||
|
|
|
@ -2,15 +2,14 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
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.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.query.Query;
|
import org.apache.jena.query.Query;
|
||||||
import org.apache.jena.query.QueryExecution;
|
import org.apache.jena.query.QueryExecution;
|
||||||
|
@ -20,12 +19,12 @@ import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.Literal;
|
import org.apache.jena.rdf.model.Literal;
|
||||||
import org.apache.jena.rdf.model.Resource;
|
import org.apache.jena.rdf.model.Resource;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
|
||||||
|
|
||||||
import net.sf.json.JSONObject;
|
|
||||||
import net.sf.json.JSONSerializer;
|
|
||||||
//Returns the appropriate n3 based on data getter
|
//Returns the appropriate n3 based on data getter
|
||||||
public class ProcessSparqlDataGetterN3 extends ProcessDataGetterAbstract {
|
public class ProcessSparqlDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
private static String classType = "java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter";
|
private static String classType = "java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter";
|
||||||
|
@ -157,10 +156,10 @@ public class ProcessSparqlDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public JSONObject getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
public ObjectNode getExistingValuesJSON(String dataGetterURI, OntModel queryModel, ServletContext context) {
|
||||||
JSONObject jObject = new JSONObject();
|
ObjectNode jObject = new ObjectMapper().createObjectNode();
|
||||||
jObject.element("dataGetterClass", classType);
|
jObject.put("dataGetterClass", classType);
|
||||||
jObject.element(classTypeVarBase, classType);
|
jObject.put(classTypeVarBase, classType);
|
||||||
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
String querystr = getExistingValuesSparqlQuery(dataGetterURI);
|
||||||
QueryExecution qe = null;
|
QueryExecution qe = null;
|
||||||
try{
|
try{
|
||||||
|
@ -179,12 +178,12 @@ public class ProcessSparqlDataGetterN3 extends ProcessDataGetterAbstract {
|
||||||
//or incorrect html
|
//or incorrect html
|
||||||
queryString = replaceQuotes(queryString);
|
queryString = replaceQuotes(queryString);
|
||||||
Resource queryModelResource = qs.getResource("queryModel");
|
Resource queryModelResource = qs.getResource("queryModel");
|
||||||
jObject.element("saveToVar", saveToVarLiteral.getString());
|
jObject.put("saveToVar", saveToVarLiteral.getString());
|
||||||
jObject.element("query",queryString);
|
jObject.put("query", queryString);
|
||||||
if(queryModelResource != null) {
|
if(queryModelResource != null) {
|
||||||
jObject.element("queryModel", queryModelResource.getURI());
|
jObject.put("queryModel", queryModelResource.getURI());
|
||||||
} else {
|
} else {
|
||||||
jObject.element("queryModel", "");
|
jObject.put("queryModel", "");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.utils.json;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.io.JsonStringEncoder;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some utility methods to ease the transition from net.sf.json to Jackson.
|
||||||
|
*/
|
||||||
|
public class JacksonUtils {
|
||||||
|
private static final String QUOTE = "\"";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A "clean room" replacement for net.sf.json.util.JSONUtils.quote().
|
||||||
|
*/
|
||||||
|
public static String quote(String raw) {
|
||||||
|
if (raw == null) {
|
||||||
|
// Null string is treated like an empty string.
|
||||||
|
return QUOTE + QUOTE;
|
||||||
|
} else {
|
||||||
|
return new StringBuilder(QUOTE)
|
||||||
|
.append(JsonStringEncoder.getInstance().quoteAsString(raw))
|
||||||
|
.append(QUOTE).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* net.sf.json could parse a JSON string without throwing a checked
|
||||||
|
* exception. Make it so we can do the same with Jackson.
|
||||||
|
*/
|
||||||
|
public static JsonNode parseJson(String json) {
|
||||||
|
try {
|
||||||
|
return new ObjectMapper().readTree(json);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new JacksonUtilsException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* net.sf.json provided this method (assuming that 'values' is an array of
|
||||||
|
* JSON objects that contain Strings.
|
||||||
|
*
|
||||||
|
* literalValues = (List<String>) JSONSerializer.toJava(values);
|
||||||
|
*
|
||||||
|
* So here is a replacement for that.
|
||||||
|
*/
|
||||||
|
public static List<String> jsonArrayToStrings(ArrayNode values) {
|
||||||
|
List<String> strings = new ArrayList<>();
|
||||||
|
for (JsonNode node : values) {
|
||||||
|
strings.add(node.asText());
|
||||||
|
}
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class JacksonUtilsException extends RuntimeException {
|
||||||
|
|
||||||
|
public JacksonUtilsException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JacksonUtilsException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JacksonUtilsException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JacksonUtilsException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.jena.query.QuerySolution;
|
import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.query.ResultSet;
|
import org.apache.jena.query.ResultSet;
|
||||||
import org.apache.jena.rdf.model.RDFNode;
|
import org.apache.jena.rdf.model.RDFNode;
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.PolicyOption.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* name
|
||||||
|
* no name
|
||||||
|
*
|
||||||
|
* displayRank
|
||||||
|
* no displayRank
|
||||||
|
*
|
||||||
|
* no child classes
|
||||||
|
* child classes
|
||||||
|
*
|
||||||
|
* child class has name
|
||||||
|
* child class has no name
|
||||||
|
*
|
||||||
|
* child class has shortDef
|
||||||
|
* child class has no shortDef
|
||||||
|
*
|
||||||
|
* G1 no name, displayRank, no classes
|
||||||
|
* G2 name, no displayRank, classes
|
||||||
|
* G2C1 no name, no shortDef
|
||||||
|
* G2C2 name, shortdef
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ListClassGroupsControllerTest extends ListControllerTestBase {
|
||||||
|
private static final String LINK_FORMAT_GROUP = "<a href='./editForm?uri=%s&controller=Classgroup'>%s</a>";
|
||||||
|
private static final String LINK_FORMAT_CLASS = "<a href='vclassEdit?uri=%s'>%s</a>";
|
||||||
|
private static final String GROUP1 = "http://ont1/group1";
|
||||||
|
private static final String GROUP2 = "http://ont1/group2";
|
||||||
|
private static final String CLASS1 = "http://ont1/class1";
|
||||||
|
private static final String CLASS2 = "http://ont1/class2";
|
||||||
|
private static final String CLASS2_NAME = "The Second Class";
|
||||||
|
private static final String CLASS2_SHORT_DEF = "A Marvelous Class";
|
||||||
|
private static final int GROUP1_RANK = 5;
|
||||||
|
private static final String GROUP2_NAME = "The Second Group";
|
||||||
|
|
||||||
|
private static final JsonNode JSON_EMPTY_RESPONSE = arrayOf();
|
||||||
|
|
||||||
|
private static final JsonNode JSON_FULL_RESPONSE = arrayOf(
|
||||||
|
groupListNode(LINK_FORMAT_GROUP, GROUP1, "(unnamed group)",
|
||||||
|
"" + GROUP1_RANK),
|
||||||
|
groupListNode(LINK_FORMAT_GROUP, GROUP2, GROUP2_NAME, "",
|
||||||
|
groupMemberNode("", "", "", ""),
|
||||||
|
groupMemberNode(LINK_FORMAT_CLASS, CLASS2, CLASS2_NAME,
|
||||||
|
CLASS2_SHORT_DEF)));
|
||||||
|
|
||||||
|
private ListClassGroupsController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private VClassGroupDaoStub vcgDao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ListClassGroupsController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
|
||||||
|
vcgDao = new VClassGroupDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setVClassGroupDao(vcgDao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noData() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, JSON_EMPTY_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void basicJsonTest() throws Exception {
|
||||||
|
populate();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The controller attempts to handle the case of a class with no name,
|
||||||
|
* but instead it returns invalid json.
|
||||||
|
*/
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse.replace("[\"\"", "[ {\"name\": \"\"");
|
||||||
|
assertKlugedJson(JSON_FULL_RESPONSE, kluged);
|
||||||
|
|
||||||
|
// assertMatchingJson(controller, req, JSON_FULL_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
vcgDao.setGroups(vClassGroup(GROUP1, null, GROUP1_RANK),
|
||||||
|
vClassGroup(GROUP2, GROUP2_NAME, -1, vclass(CLASS1, null, null),
|
||||||
|
vclass(CLASS2, CLASS2_NAME, CLASS2_SHORT_DEF)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClassGroup vClassGroup(String uri, String name, int rank,
|
||||||
|
VClass... vClasses) {
|
||||||
|
VClassGroup group = new VClassGroup(uri, name, rank);
|
||||||
|
for (VClass vClass : vClasses) {
|
||||||
|
group.add(vClass);
|
||||||
|
}
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name, String shortDef) {
|
||||||
|
VClass vc = new VClass(uri);
|
||||||
|
vc.setName(name);
|
||||||
|
vc.setShortDef(shortDef);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,185 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some useful methods for assembling JSON structures that will match the test
|
||||||
|
* results.
|
||||||
|
*
|
||||||
|
* Also, some methods for running the tests, with and without kluging the
|
||||||
|
* results.
|
||||||
|
*/
|
||||||
|
public class ListControllerTestBase extends AbstractTestClass {
|
||||||
|
protected static ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a JSON array from nodes.
|
||||||
|
*/
|
||||||
|
protected static ArrayNode arrayOf(JsonNode... nodes) {
|
||||||
|
ArrayNode array = mapper.createArrayNode();
|
||||||
|
for (JsonNode node : nodes) {
|
||||||
|
array.add(node);
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a DataProperty or an ObjectProperty in a list.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode propertyListNode(String path, String uri,
|
||||||
|
String name, String internalName, String domainVClass,
|
||||||
|
String rangeVClass, String group) {
|
||||||
|
String nameString = String.format("<a href='%s?uri=%s'>%s</a>", path,
|
||||||
|
urlEncode(uri), name);
|
||||||
|
ObjectNode propNode = mapper.createObjectNode().put("name", nameString);
|
||||||
|
propNode.putObject("data").put("internalName", internalName)
|
||||||
|
.put("domainVClass", domainVClass)
|
||||||
|
.put("rangeVClass", rangeVClass).put("group", group);
|
||||||
|
return propNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a DataProperty or an ObjectProperty in a hierarchy.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode propertyHierarchyNode(String path, String uri,
|
||||||
|
String name, String internalName, String domainVClass,
|
||||||
|
String rangeVClass, String group, ObjectNode... children) {
|
||||||
|
ObjectNode propNode = propertyListNode(path, uri, name, internalName,
|
||||||
|
domainVClass, rangeVClass, group);
|
||||||
|
propNode.set("children", arrayOf(children));
|
||||||
|
return propNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a VClass in a list.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode degenerateVclassListNode(String name,
|
||||||
|
String shortDef, String classGroup, String ontology) {
|
||||||
|
ObjectNode vcNode = mapper.createObjectNode().put("name", name);
|
||||||
|
vcNode.putObject("data").put("shortDef", shortDef)
|
||||||
|
.put("classGroup", classGroup).put("ontology", ontology);
|
||||||
|
return vcNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a VClass in a list.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode vclassListNode(String path, String uri,
|
||||||
|
String name, String shortDef, String classGroup, String ontology) {
|
||||||
|
String nameString = String.format("<a href='%s?uri=%s'>%s</a>", path,
|
||||||
|
urlEncode(uri), name);
|
||||||
|
ObjectNode vcNode = mapper.createObjectNode().put("name", nameString);
|
||||||
|
vcNode.putObject("data").put("shortDef", shortDef)
|
||||||
|
.put("classGroup", classGroup).put("ontology", ontology);
|
||||||
|
return vcNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a VClass in a hierarchy.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode vclassHierarchyNode(String path, String uri,
|
||||||
|
String name, String shortDef, String classGroup, String ontology,
|
||||||
|
ObjectNode... children) {
|
||||||
|
ObjectNode vcNode = vclassListNode(path, uri, name, shortDef,
|
||||||
|
classGroup, ontology);
|
||||||
|
vcNode.set("children", arrayOf(children));
|
||||||
|
return vcNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a ClassGroup or PropertyGroup in a list.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode groupListNode(String linkFormat, String uri,
|
||||||
|
String name, String displayRank, ObjectNode... children) {
|
||||||
|
String nameString = String.format(linkFormat, urlEncode(uri), name);
|
||||||
|
ObjectNode gNode = mapper.createObjectNode().put("name", nameString);
|
||||||
|
gNode.putObject("data").put("displayRank", displayRank);
|
||||||
|
gNode.set("children", arrayOf(children));
|
||||||
|
return gNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a Class or Property as part of a Group.
|
||||||
|
*/
|
||||||
|
protected static ObjectNode groupMemberNode(String linkFormat, String uri,
|
||||||
|
String name, String shortDef, ObjectNode... children) {
|
||||||
|
String nameString = String.format(linkFormat, urlEncode(uri), name);
|
||||||
|
ObjectNode memberNode = mapper.createObjectNode().put("name",
|
||||||
|
nameString);
|
||||||
|
memberNode.putObject("data").put("shortDef", shortDef);
|
||||||
|
memberNode.set("children", arrayOf(children));
|
||||||
|
return memberNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on the fact that each of these controllers returns a
|
||||||
|
* TemplateResponseValues object with a "jsonTree" in the body map.
|
||||||
|
*
|
||||||
|
* That jsonTree would be an standard JSON array, except that it is missing
|
||||||
|
* the enclosing brackets, so we need to add them before comparing to the
|
||||||
|
* expected value.
|
||||||
|
*
|
||||||
|
* Add the brackets, read the strings, and compare.
|
||||||
|
*/
|
||||||
|
protected static void assertMatchingJson(FreemarkerHttpServlet controller,
|
||||||
|
HttpServletRequest req, JsonNode expected) throws Exception {
|
||||||
|
String jsonString = getJsonFromController(controller, req);
|
||||||
|
JsonNode actual = mapper.readTree("[" + jsonString + "]");
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Some of the controllers have edge cases that produce invalid JSON, even
|
||||||
|
* when wrapped in enclosing brackets. For those cases, call this method,
|
||||||
|
* massage the result to form valid JSON, and call assertKlugedJson().
|
||||||
|
*/
|
||||||
|
protected static String getJsonFromController(
|
||||||
|
FreemarkerHttpServlet controller, HttpServletRequest req)
|
||||||
|
throws Exception {
|
||||||
|
ResponseValues rv = controller.processRequest(new VitroRequest(req));
|
||||||
|
assertTrue(rv instanceof TemplateResponseValues);
|
||||||
|
TemplateResponseValues trv = (TemplateResponseValues) rv;
|
||||||
|
|
||||||
|
Object o = trv.getMap().get("jsonTree");
|
||||||
|
assertTrue(o instanceof String);
|
||||||
|
String jsonString = (String) o;
|
||||||
|
return jsonString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If it was necessary to manipulate the response from the controller, this
|
||||||
|
* is how to test it.
|
||||||
|
*/
|
||||||
|
protected void assertKlugedJson(JsonNode expected,
|
||||||
|
String klugedActualString) throws Exception {
|
||||||
|
JsonNode actual = mapper.readTree("[" + klugedActualString + "]");
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String urlEncode(String uri) {
|
||||||
|
try {
|
||||||
|
return URLEncoder.encode(uri, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,255 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LanguageOption.LANGUAGE_NEUTRAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.PolicyOption.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Datatype;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.DatatypeDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
* DataProperty does not match Ontology, but has child properties that do.
|
||||||
|
*
|
||||||
|
* Name from picklistName
|
||||||
|
* Name from getName
|
||||||
|
* Name from getUri
|
||||||
|
* Name no URL? -- NONSENSICAL
|
||||||
|
*
|
||||||
|
* InternalName from picklistName
|
||||||
|
* InternalName missing.
|
||||||
|
*
|
||||||
|
* Domain class no class URI
|
||||||
|
* Domain class no class for URI
|
||||||
|
* Domain class get picklistName from Language Aware DAO
|
||||||
|
* Domain class use picklistName from Language Neutral DAO
|
||||||
|
*
|
||||||
|
* Range no range URI
|
||||||
|
* Range no datatype for URI
|
||||||
|
* Range datatype has no name
|
||||||
|
* Range has a name
|
||||||
|
*
|
||||||
|
* Group no group URI
|
||||||
|
* Group no group for URI
|
||||||
|
* Group no name
|
||||||
|
* Group has a name
|
||||||
|
*
|
||||||
|
* DP1 Ont1, no name, no picklistName, no domainClass, no RangeClass, no GroupURI
|
||||||
|
* DP2 Ont2, name, no picklistName, no domain class for URI, no range datatype for URI, no group for GroupURI
|
||||||
|
* DP3 Ont1, picklistname, domainclass no picklistname, range datatype with no name, group has no name
|
||||||
|
* DP4 Ont1, picklistname, domainclass w/picklistname, range datatype with name, group with name
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ListDatatypePropertiesControllerTest
|
||||||
|
extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "datapropEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String DP1 = ONT1 + "first";
|
||||||
|
private static final String DP2 = ONT2 + "second";
|
||||||
|
private static final String DP3 = ONT1 + "third";
|
||||||
|
private static final String DP4 = ONT1 + "fourth";
|
||||||
|
private static final String DP2_NAME = "TWO";
|
||||||
|
private static final String DP3_NAME = "THREE";
|
||||||
|
private static final String DP4_NAME = "FOUR";
|
||||||
|
private static final String DP3_PICK_NAME = "The third one";
|
||||||
|
private static final String DP4_PICK_NAME = "The fourth one";
|
||||||
|
private static final String DOMAIN_NONE = "http://domain/noSuchDomain";
|
||||||
|
private static final String DOMAIN_NO_NAME = "http://domain/domainWithNoName";
|
||||||
|
private static final String DOMAIN_W_NAME = "http://domain/namedDomain";
|
||||||
|
private static final String NAME_DOMAIN = "An excellent domain";
|
||||||
|
private static final String RANGE_NONE = "http://domain/noSuchRange";
|
||||||
|
private static final String RANGE_NO_NAME = "http://domain/rangeWithNoName";
|
||||||
|
private static final String RANGE_W_NAME = "http://domain/namedRange";
|
||||||
|
private static final String NAME_RANGE = "Home on the range";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final ArrayNode NO_DATA_RESPONSE = arrayOf(
|
||||||
|
mapper.createObjectNode().put("name", "No data properties found"));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
propertyListNode(PATH, DP1, "first", "first", "", "",
|
||||||
|
"unspecified"),
|
||||||
|
propertyListNode(PATH, DP2, "second", "second", "", RANGE_NONE,
|
||||||
|
"unknown group"),
|
||||||
|
propertyListNode(PATH, DP4, DP4_PICK_NAME, DP4_PICK_NAME,
|
||||||
|
NAME_DOMAIN, NAME_RANGE, NAME_GROUP),
|
||||||
|
propertyListNode(PATH, DP3, DP3_PICK_NAME, DP3_PICK_NAME,
|
||||||
|
"domainWithNoName", "", ""));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
propertyListNode(PATH, DP1, "first", "first", "", "",
|
||||||
|
"unspecified"),
|
||||||
|
propertyListNode(PATH, DP4, DP4_PICK_NAME, DP4_PICK_NAME,
|
||||||
|
NAME_DOMAIN, NAME_RANGE, NAME_GROUP),
|
||||||
|
propertyListNode(PATH, DP3, DP3_PICK_NAME, DP3_PICK_NAME,
|
||||||
|
"domainWithNoName", "", ""));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
propertyListNode(PATH, DP2, "second", "second", "", RANGE_NONE,
|
||||||
|
"unknown group"));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT3 = arrayOf(
|
||||||
|
mapper.createObjectNode().put("name", "No data properties found"));
|
||||||
|
|
||||||
|
private ListDatatypePropertiesController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private DataPropertyDaoStub dpdao;
|
||||||
|
private DatatypeDaoStub dtdao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
private PropertyGroupDaoStub pgdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ListDatatypePropertiesController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
dpdao = new DataPropertyDaoStub();
|
||||||
|
dtdao = new DatatypeDaoStub();
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
pgdao = new PropertyGroupDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setDataPropertyDao(dpdao);
|
||||||
|
wadf.setDatatypeDao(dtdao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
wadf.setPropertyGroupDao(pgdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, LANGUAGE_NEUTRAL,
|
||||||
|
POLICY_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noDataProperties() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, NO_DATA_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_UNFILTERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_NO_NAME, null));
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_W_NAME, NAME_DOMAIN));
|
||||||
|
dtdao.addDatatype(datatype(RANGE_NO_NAME, null));
|
||||||
|
dtdao.addDatatype(datatype(RANGE_W_NAME, NAME_RANGE));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_NO_NAME, null));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_W_NAME, NAME_GROUP));
|
||||||
|
dpdao.addDataProperty(dataProperty(DP1, null, null, null, null, null));
|
||||||
|
dpdao.addDataProperty(dataProperty(DP2, DP2_NAME, null, DOMAIN_NONE,
|
||||||
|
RANGE_NONE, GROUP_NONE));
|
||||||
|
dpdao.addDataProperty(dataProperty(DP3, DP3_NAME, DP3_PICK_NAME,
|
||||||
|
DOMAIN_NO_NAME, RANGE_NO_NAME, GROUP_NO_NAME));
|
||||||
|
dpdao.addDataProperty(dataProperty(DP4, DP4_NAME, DP4_PICK_NAME,
|
||||||
|
DOMAIN_W_NAME, RANGE_W_NAME, GROUP_W_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataProperty dataProperty(String uri, String name,
|
||||||
|
String pickListName, String domainClassUri, String rangeDatatypeUri,
|
||||||
|
String groupUri) {
|
||||||
|
DataProperty dp = new DataProperty();
|
||||||
|
dp.setURI(uri);
|
||||||
|
dp.setName(name);
|
||||||
|
dp.setPickListName(pickListName);
|
||||||
|
dp.setDomainClassURI(domainClassUri);
|
||||||
|
dp.setRangeDatatypeURI(rangeDatatypeUri);
|
||||||
|
dp.setGroupURI(groupUri);
|
||||||
|
return dp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Datatype datatype(String uri, String name) {
|
||||||
|
Datatype dt = new Datatype();
|
||||||
|
dt.setUri(uri);
|
||||||
|
dt.setName(name);
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String pickListName) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
vc.setPickListName(pickListName);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup propertyGroup(String uri, String name) {
|
||||||
|
PropertyGroup pg = new PropertyGroup();
|
||||||
|
pg.setURI(uri);
|
||||||
|
pg.setName(name);
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,170 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.PolicyOption.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* name
|
||||||
|
* no name - (unnamed group)
|
||||||
|
*
|
||||||
|
* display rank
|
||||||
|
* no display rank
|
||||||
|
*
|
||||||
|
* no child properties
|
||||||
|
* child property is data property
|
||||||
|
* child properti is object property
|
||||||
|
*
|
||||||
|
* child data property has no name
|
||||||
|
* child data property has name
|
||||||
|
* child object property has no domainPublic
|
||||||
|
* child object property has domainPublic
|
||||||
|
*
|
||||||
|
* G1 no name, displayRank, no classes
|
||||||
|
* G2 name, no displayRank, classes
|
||||||
|
* G2DP1 no name, no shortDef
|
||||||
|
* G2DP2 name, shortdef
|
||||||
|
* G2OP1 no domainPublic, no shortDef
|
||||||
|
* G2OP2 domainPublic, shortdef
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ListPropertyGroupsControllerTest extends ListControllerTestBase {
|
||||||
|
private static final String LINK_FORMAT_GROUP = "<a href='./editForm?uri=%s&controller=PropertyGroup'>%s</a>";
|
||||||
|
private static final String LINK_FORMAT_DATA_PROPERTY = "<a href='datapropEdit?uri=%s'>%s</a>";
|
||||||
|
private static final String LINK_FORMAT_OBJECT_PROPERTY = "<a href='propertyEdit?uri=%s'>%s</a>";
|
||||||
|
private static final String GROUP1 = "http://ont1/group1";
|
||||||
|
private static final String GROUP2 = "http://ont1/group2";
|
||||||
|
private static final String DP1 = "http://ont1/dp1";
|
||||||
|
private static final String DP2 = "http://ont1/dp2";
|
||||||
|
private static final String OP1 = "http://ont1/op1";
|
||||||
|
private static final String OP2 = "http://ont1/op2";
|
||||||
|
private static final String DP2_NAME = "A second data property";
|
||||||
|
private static final String OP2_DOMAIN_PUBLIC = "The second domain";
|
||||||
|
private static final int GROUP1_RANK = 5;
|
||||||
|
private static final String GROUP2_NAME = "The Second Group";
|
||||||
|
|
||||||
|
private static final JsonNode JSON_EMPTY_RESPONSE = arrayOf();
|
||||||
|
|
||||||
|
private static final JsonNode JSON_FULL_RESPONSE = arrayOf(
|
||||||
|
groupListNode(LINK_FORMAT_GROUP, GROUP2, GROUP2_NAME, "",
|
||||||
|
groupMemberNode(LINK_FORMAT_DATA_PROPERTY, DP1, null, ""),
|
||||||
|
groupMemberNode(LINK_FORMAT_DATA_PROPERTY, DP2, DP2_NAME,
|
||||||
|
""),
|
||||||
|
groupMemberNode(LINK_FORMAT_OBJECT_PROPERTY, OP1, null, ""),
|
||||||
|
groupMemberNode(LINK_FORMAT_OBJECT_PROPERTY, OP2,
|
||||||
|
OP2_DOMAIN_PUBLIC, "")),
|
||||||
|
groupListNode(LINK_FORMAT_GROUP, GROUP1, "(unnamed group)",
|
||||||
|
"" + GROUP1_RANK));
|
||||||
|
|
||||||
|
private ListPropertyGroupsController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private PropertyGroupDaoStub pgdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ListPropertyGroupsController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
|
||||||
|
pgdao = new PropertyGroupDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setPropertyGroupDao(pgdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noData() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, JSON_EMPTY_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void basicJsonTest() throws Exception {
|
||||||
|
populate();
|
||||||
|
|
||||||
|
// /*
|
||||||
|
// * The controller attempts to handle the case of a class with no name,
|
||||||
|
// * but instead it returns invalid json.
|
||||||
|
// */
|
||||||
|
// String rawResponse = getJsonFromController(controller, req);
|
||||||
|
// String kluged = rawResponse.replace("[\"\"", "[ {\"name\": \"\"");
|
||||||
|
// assertKlugedJson(JSON_FULL_RESPONSE, kluged);
|
||||||
|
|
||||||
|
assertMatchingJson(controller, req, JSON_FULL_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP1, "", GROUP1_RANK));
|
||||||
|
pgdao.addPropertyGroup(
|
||||||
|
propertyGroup(GROUP2, GROUP2_NAME, -1, dataProperty(DP1, null),
|
||||||
|
dataProperty(DP2, DP2_NAME), objectProperty(OP1, null),
|
||||||
|
objectProperty(OP2, OP2_DOMAIN_PUBLIC)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup propertyGroup(String uri, String name,
|
||||||
|
int displayRank, Property... properties) {
|
||||||
|
PropertyGroup pg = new PropertyGroup();
|
||||||
|
pg.setURI(uri);
|
||||||
|
pg.setName(name);
|
||||||
|
pg.setDisplayRank(displayRank);
|
||||||
|
pg.setPropertyList(new ArrayList<>(Arrays.asList(properties)));
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObjectProperty objectProperty(String uri, String name) {
|
||||||
|
ObjectProperty op = new ObjectProperty();
|
||||||
|
op.setURI(uri);
|
||||||
|
op.setDomainPublic(name);
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataProperty dataProperty(String uri, String name) {
|
||||||
|
DataProperty dp = new DataProperty();
|
||||||
|
dp.setURI(uri);
|
||||||
|
dp.setName(name);
|
||||||
|
return dp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,253 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LanguageOption.LANGUAGE_NEUTRAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.PolicyOption.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.OntologyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
* DataProperty does not match Ontology, but has child properties that do.
|
||||||
|
*
|
||||||
|
* Name from picklistName
|
||||||
|
* Name from getUri
|
||||||
|
* Name no URL? -- NONSENSICAL
|
||||||
|
*
|
||||||
|
* InternalName from localNameWithPrefix
|
||||||
|
* InternalName from localName
|
||||||
|
* InternalName from URI
|
||||||
|
*
|
||||||
|
* Domain class no class URI
|
||||||
|
* Domain class no class for URI
|
||||||
|
* Domain class use picklistName
|
||||||
|
*
|
||||||
|
* Range class no class URI
|
||||||
|
* Range class no class for URI
|
||||||
|
* Range class use picklistName
|
||||||
|
*
|
||||||
|
* Group no group URI
|
||||||
|
* Group no group for URI
|
||||||
|
* Group no name
|
||||||
|
* Group has a name
|
||||||
|
*
|
||||||
|
* OP1 Ont1, no picklistName, no localNameWithPrefix, no domainClass, no rangeClass, no GroupURI
|
||||||
|
* OP2 Ont2, picklistName, no localNameWithPrefix, no domain class for URI, no range class for URI, no group for GroupURI
|
||||||
|
* OP3 Ont1, picklistName, localNameWithPrefix, domainclass no picklistname, range class no picklistname, group has no name
|
||||||
|
* OP4 Ont1, picklistName, localNameWithPrefix, domainclass w/picklistname, range class w/picklistname, group with name
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ListPropertyWebappsControllerTest extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "./propertyEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String OP1 = ONT1 + "first";
|
||||||
|
private static final String OP2 = ONT2 + "second";
|
||||||
|
private static final String OP3 = ONT1 + "third";
|
||||||
|
private static final String OP4 = ONT1 + "fourth";
|
||||||
|
private static final String OP2_PICK_NAME = "The second one";
|
||||||
|
private static final String OP3_PICK_NAME = "The third one";
|
||||||
|
private static final String OP4_PICK_NAME = "The fourth one";
|
||||||
|
private static final String OP3_LOCALNAME_W_PREFIX = "ontology1:third";
|
||||||
|
private static final String OP4_LOCALNAME_W_PREFIX = "ontology1:fourth";
|
||||||
|
private static final String DOMAIN_NONE = "http://domain/noSuchDomain";
|
||||||
|
private static final String DOMAIN_NO_NAME = "http://domain/domainWithNoName";
|
||||||
|
private static final String DOMAIN_W_NAME = "http://domain/namedDomain";
|
||||||
|
private static final String NAME_DOMAIN = "An excellent domain";
|
||||||
|
private static final String RANGE_NONE = "http://domain/noSuchRange";
|
||||||
|
private static final String RANGE_NO_NAME = "http://domain/rangeWithNoName";
|
||||||
|
private static final String RANGE_W_NAME = "http://domain/namedRange";
|
||||||
|
private static final String NAME_RANGE = "Home on the range";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final JsonNode NO_DATA_RESPONSE = arrayOf(mapper
|
||||||
|
.createObjectNode().put("name", "No object properties found"));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
propertyListNode(PATH, OP1, "first", "first", "", "",
|
||||||
|
"unspecified"),
|
||||||
|
propertyListNode(PATH, OP4, OP4_PICK_NAME, OP4_LOCALNAME_W_PREFIX,
|
||||||
|
NAME_DOMAIN, NAME_RANGE, NAME_GROUP),
|
||||||
|
propertyListNode(PATH, OP2, OP2_PICK_NAME, "second", "", "",
|
||||||
|
"unknown group"),
|
||||||
|
propertyListNode(PATH, OP3, OP3_PICK_NAME, OP3_LOCALNAME_W_PREFIX,
|
||||||
|
"domainWithNoName", "rangeWithNoName", ""));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
propertyListNode(PATH, OP1, "first", "first", "", "",
|
||||||
|
"unspecified"),
|
||||||
|
propertyListNode(PATH, OP4, OP4_PICK_NAME, OP4_LOCALNAME_W_PREFIX,
|
||||||
|
NAME_DOMAIN, NAME_RANGE, NAME_GROUP),
|
||||||
|
propertyListNode(PATH, OP3, OP3_PICK_NAME, OP3_LOCALNAME_W_PREFIX,
|
||||||
|
"domainWithNoName", "rangeWithNoName", ""));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
propertyListNode(PATH, OP2, OP2_PICK_NAME, "second", "", "",
|
||||||
|
"unknown group"));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT3 = arrayOf(mapper
|
||||||
|
.createObjectNode().put("name", "No object properties found"));
|
||||||
|
|
||||||
|
private ListPropertyWebappsController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private ObjectPropertyDaoStub opdao;
|
||||||
|
private OntologyDaoStub odao;
|
||||||
|
private PropertyGroupDaoStub pgdao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ListPropertyWebappsController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
opdao = new ObjectPropertyDaoStub();
|
||||||
|
odao = new OntologyDaoStub();
|
||||||
|
pgdao = new PropertyGroupDaoStub();
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setObjectPropertyDao(opdao);
|
||||||
|
wadf.setOntologyDao(odao);
|
||||||
|
wadf.setPropertyGroupDao(pgdao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
LANGUAGE_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noDataProperties() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, NO_DATA_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_UNFILTERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_NO_NAME, null));
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_W_NAME, NAME_DOMAIN));
|
||||||
|
vcdao.setVClass(vclass(RANGE_NO_NAME, null));
|
||||||
|
vcdao.setVClass(vclass(RANGE_W_NAME, NAME_RANGE));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_NO_NAME, null, 5));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_W_NAME, NAME_GROUP, 3));
|
||||||
|
opdao.addObjectProperty(
|
||||||
|
objectProperty(OP1, null, null, null, null, null));
|
||||||
|
opdao.addObjectProperty(objectProperty(OP2, OP2_PICK_NAME, null,
|
||||||
|
DOMAIN_NONE, RANGE_NONE, GROUP_NONE));
|
||||||
|
opdao.addObjectProperty(
|
||||||
|
objectProperty(OP3, OP3_PICK_NAME, OP3_LOCALNAME_W_PREFIX,
|
||||||
|
DOMAIN_NO_NAME, RANGE_NO_NAME, GROUP_NO_NAME));
|
||||||
|
opdao.addObjectProperty(
|
||||||
|
objectProperty(OP4, OP4_PICK_NAME, OP4_LOCALNAME_W_PREFIX,
|
||||||
|
DOMAIN_W_NAME, RANGE_W_NAME, GROUP_W_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup propertyGroup(String uri, String name,
|
||||||
|
int displayRank, Property... properties) {
|
||||||
|
PropertyGroup pg = new PropertyGroup();
|
||||||
|
pg.setURI(uri);
|
||||||
|
pg.setName(name);
|
||||||
|
pg.setDisplayRank(displayRank);
|
||||||
|
pg.setPropertyList(new ArrayList<>(Arrays.asList(properties)));
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObjectProperty objectProperty(String uri, String name,
|
||||||
|
String localNameWithPrefix, String domainVClass, String rangeVClass,
|
||||||
|
String propertyGroup) {
|
||||||
|
ObjectProperty op = new ObjectProperty();
|
||||||
|
op.setURI(uri);
|
||||||
|
op.setPickListName(name);
|
||||||
|
op.setLocalNameWithPrefix(localNameWithPrefix);
|
||||||
|
op.setRangeVClassURI(rangeVClass);
|
||||||
|
op.setDomainVClassURI(domainVClass);
|
||||||
|
op.setGroupURI(propertyGroup);
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
vc.setPickListName(name);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,233 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.PolicyOption.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.OntologyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
*
|
||||||
|
* classes = empty
|
||||||
|
* classes = null -- UNREALISTIC
|
||||||
|
*
|
||||||
|
* no pickListName
|
||||||
|
* pickListName
|
||||||
|
*
|
||||||
|
* shortDef
|
||||||
|
* no shortDef
|
||||||
|
*
|
||||||
|
* no group uri
|
||||||
|
* no group for uri
|
||||||
|
* no name for group
|
||||||
|
* group with name
|
||||||
|
*
|
||||||
|
* ontology not found
|
||||||
|
* ontology no name
|
||||||
|
* ontology with name
|
||||||
|
*
|
||||||
|
* VC1 - Ont1, no pickListName, no shortDef, no GroupURI, no matching Ontology
|
||||||
|
* VC2 - Ont2, pickListName, shortDef, no group for GroupURI, ontology has no name
|
||||||
|
* VC3 - Ont2, pickListName, shortDef, group has no name, ontology with name
|
||||||
|
* VC4 - Ont1, pickListName, shortDef, group with name, no matching Ontology
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* Sorted by picklist
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ListVClassWebappsControllerTest extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "./vclassEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String ONT2_NAME = "Fabulous Ontology";
|
||||||
|
private static final String VC1 = ONT1 + "vc1";
|
||||||
|
private static final String VC2 = ONT2 + "vc2";
|
||||||
|
private static final String VC3 = ONT2 + "vc3";
|
||||||
|
private static final String VC4 = ONT1 + "vc4";
|
||||||
|
private static final String VC2_NAME = "Carol";
|
||||||
|
private static final String VC3_NAME = "Ted";
|
||||||
|
private static final String VC4_NAME = "ALice";
|
||||||
|
private static final String VC2_SHORT_DEF = "Short Carol";
|
||||||
|
private static final String VC3_SHORT_DEF = "Tiny Ted";
|
||||||
|
private static final String VC4_SHORT_DEF = "Wee ALice";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final JsonNode JSON_EMPTY_RESPONSE = arrayOf();
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
vclassListNode(PATH, VC4, VC4_NAME, VC4_SHORT_DEF, NAME_GROUP,
|
||||||
|
ONT1),
|
||||||
|
vclassListNode(PATH, VC2, VC2_NAME, VC2_SHORT_DEF, "", ONT2_NAME),
|
||||||
|
vclassListNode(PATH, VC3, VC3_NAME, VC3_SHORT_DEF, "", ONT2_NAME),
|
||||||
|
degenerateVclassListNode("", "", "", ONT1) // VC1
|
||||||
|
);
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
vclassListNode(PATH, VC4, VC4_NAME, VC4_SHORT_DEF, NAME_GROUP,
|
||||||
|
ONT1),
|
||||||
|
degenerateVclassListNode("", "", "", ONT1) // VC1
|
||||||
|
);
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
vclassListNode(PATH, VC2, VC2_NAME, VC2_SHORT_DEF, "", ONT2_NAME),
|
||||||
|
vclassListNode(PATH, VC3, VC3_NAME, VC3_SHORT_DEF, "", ONT2_NAME));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT3 = arrayOf();
|
||||||
|
|
||||||
|
private ListVClassWebappsController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private OntologyDaoStub odao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
private VClassGroupDaoStub vcgdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ListVClassWebappsController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
odao = new OntologyDaoStub();
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
vcgdao = new VClassGroupDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setOntologyDao(odao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
wadf.setVClassGroupDao(vcgdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
// modelsFactory.get(req).setWebappDaoFactory(wadf, LANGUAGE_NEUTRAL,
|
||||||
|
// POLICY_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noData() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, JSON_EMPTY_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
|
||||||
|
// No name produces invalid JSON so we kluge it for easy comparison
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse.replace("\"\"\"", "\"\",\"");
|
||||||
|
assertKlugedJson(RESPONSE_UNFILTERED, kluged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
// No name produces invalid JSON so we kluge it for easy comparison
|
||||||
|
// Filtered out classes leave their commas behind, so remove them
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse.replace("\"\"\"", "\"\",\"")
|
||||||
|
.replace(", , ,", ",");
|
||||||
|
assertKlugedJson(RESPONSE_FILTERED_BY_ONT1, kluged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
// Filtered out classes leave their commas behind, so remove them
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse.replaceAll(", $", " ");
|
||||||
|
assertKlugedJson(RESPONSE_FILTERED_BY_ONT2, kluged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
odao.insertNewOntology(ontology(ONT2, ONT2_NAME));
|
||||||
|
odao.insertNewOntology(ontology(ONT3, null));
|
||||||
|
vcgdao.setGroups(vclassGroup(GROUP_NO_NAME, null));
|
||||||
|
vcgdao.setGroups(vclassGroup(GROUP_W_NAME, NAME_GROUP));
|
||||||
|
vcdao.setVClass(vclass(VC1, null, null, null));
|
||||||
|
vcdao.setVClass(vclass(VC2, VC2_NAME, VC2_SHORT_DEF, GROUP_NONE));
|
||||||
|
vcdao.setVClass(vclass(VC3, VC3_NAME, VC3_SHORT_DEF, GROUP_NO_NAME));
|
||||||
|
vcdao.setVClass(vclass(VC4, VC4_NAME, VC4_SHORT_DEF, GROUP_W_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name, String shortDef,
|
||||||
|
String groupURI) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
if (name != null) {
|
||||||
|
vc.setName(name);
|
||||||
|
vc.setPickListName(name);
|
||||||
|
}
|
||||||
|
if (shortDef != null) {
|
||||||
|
vc.setShortDef(shortDef);
|
||||||
|
}
|
||||||
|
if (groupURI != null) {
|
||||||
|
vc.setGroupURI(groupURI);
|
||||||
|
}
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClassGroup vclassGroup(String uri, String name) {
|
||||||
|
VClassGroup vcg = new VClassGroup();
|
||||||
|
vcg.setURI(uri);
|
||||||
|
vcg.setPublicName(name);
|
||||||
|
return vcg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Ontology ontology(String uri, String name) {
|
||||||
|
Ontology o = new Ontology();
|
||||||
|
o.setURI(uri);
|
||||||
|
o.setName(name);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,229 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.ASSERTIONS_ONLY;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Ontology;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.OntologyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
* VClass does not match Ontology, but has child properties that do.
|
||||||
|
*
|
||||||
|
* pickListName
|
||||||
|
* no pickListName
|
||||||
|
*
|
||||||
|
* shortDef
|
||||||
|
* no shortDef
|
||||||
|
*
|
||||||
|
* Group no group URI
|
||||||
|
* Group no group for URI
|
||||||
|
* Group no name
|
||||||
|
* Group has a name
|
||||||
|
*
|
||||||
|
* No ontology for namespace
|
||||||
|
* Ontology but no name
|
||||||
|
* Ontology with name
|
||||||
|
*
|
||||||
|
* DP_1A Ont1, no pickListName, no shortDef, no GroupURI, no matching Ontology
|
||||||
|
* DP_1B Ont2, pickListName, shortDef, no group for GroupURI, ontology has no name
|
||||||
|
* DP_1B2A Ont3, pickListName, shortDef, group has no name, ontology with name
|
||||||
|
* DP_1B2B Ont1, pickListName, shortDef, group with name, no matching Ontology
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ShowClassHierarchyControllerTest extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "vclassEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String ONT3_NAME = "Fabulous Ontology";
|
||||||
|
private static final String URI_GREATAUNT = ONT1 + "greatAunt";
|
||||||
|
private static final String URI_GRANDMOTHER = ONT2 + "grandmother";
|
||||||
|
private static final String URI_AUNT = ONT3 + "aunt";
|
||||||
|
private static final String URI_MOTHER = ONT1 + "mother";
|
||||||
|
private static final String NAME_GRANDMOTHER = "GrandMother";
|
||||||
|
private static final String NAME_AUNT = "Aunt";
|
||||||
|
private static final String NAME_MOTHER = "Mother";
|
||||||
|
private static final String SHORT_DEF_GRANDMOTHER = "My GrandMother";
|
||||||
|
private static final String SHORT_DEF_AUNT = "My Aunt";
|
||||||
|
private static final String SHORT_DEF_MOTHER = "My Mother";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final ArrayNode JSON_EMPTY_RESPONSE = arrayOf(
|
||||||
|
vclassHierarchyNode(PATH,
|
||||||
|
"http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource",
|
||||||
|
"Resource", "", "",
|
||||||
|
"http://www.w3.org/1999/02/22-rdf-syntax-ns#"));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
vclassHierarchyNode(PATH,URI_GRANDMOTHER, NAME_GRANDMOTHER,
|
||||||
|
SHORT_DEF_GRANDMOTHER, "", ONT2,
|
||||||
|
vclassHierarchyNode(PATH,URI_AUNT, NAME_AUNT, SHORT_DEF_AUNT, "",
|
||||||
|
ONT3_NAME),
|
||||||
|
vclassHierarchyNode(PATH,URI_MOTHER, NAME_MOTHER,
|
||||||
|
SHORT_DEF_MOTHER, NAME_GROUP, ONT1)),
|
||||||
|
vclassHierarchyNode(PATH,URI_GREATAUNT, "greatAunt", "", "", ONT1));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
vclassHierarchyNode(PATH,URI_GREATAUNT, "greatAunt", "", "", ONT1));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
vclassHierarchyNode(PATH,URI_GRANDMOTHER, NAME_GRANDMOTHER,
|
||||||
|
SHORT_DEF_GRANDMOTHER, "", ONT2));
|
||||||
|
|
||||||
|
private static final JsonNode RESPONSE_FILTERED_BY_ONT3 = arrayOf();
|
||||||
|
|
||||||
|
private ShowClassHierarchyController controller;
|
||||||
|
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
|
||||||
|
private OntologyDaoStub ontdao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
private VClassGroupDaoStub vcgdao;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ShowClassHierarchyController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
ontdao = new OntologyDaoStub();
|
||||||
|
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
|
||||||
|
vcgdao = new VClassGroupDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setOntologyDao(ontdao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
wadf.setVClassGroupDao(vcgdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
ASSERTIONS_ONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noData() throws Exception {
|
||||||
|
assertMatchingJson(controller, req, JSON_EMPTY_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_UNFILTERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
ontdao.insertNewOntology(ontology(ONT2, null));
|
||||||
|
ontdao.insertNewOntology(ontology(ONT3, ONT3_NAME));
|
||||||
|
vcgdao.setGroups(vclassGroup(GROUP_NO_NAME, null));
|
||||||
|
vcgdao.setGroups(vclassGroup(GROUP_W_NAME, NAME_GROUP));
|
||||||
|
vcdao.setVClass(vclass(URI_GREATAUNT, null, null, null));
|
||||||
|
vcdao.setVClass(vclass(URI_GRANDMOTHER, NAME_GRANDMOTHER, GROUP_NONE,
|
||||||
|
SHORT_DEF_GRANDMOTHER));
|
||||||
|
vcdao.setVClass(
|
||||||
|
vclass(URI_AUNT, NAME_AUNT, GROUP_NO_NAME, SHORT_DEF_AUNT),
|
||||||
|
URI_GRANDMOTHER);
|
||||||
|
vcdao.setVClass(
|
||||||
|
vclass(URI_MOTHER, NAME_MOTHER, GROUP_W_NAME, SHORT_DEF_MOTHER),
|
||||||
|
URI_GRANDMOTHER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name, String groupUri,
|
||||||
|
String shortDef) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
vc.setPickListName(name);
|
||||||
|
vc.setShortDef(shortDef);
|
||||||
|
vc.setGroupURI(groupUri);
|
||||||
|
VClassGroup group = vcgdao.getGroupByURI(groupUri);
|
||||||
|
if (group != null) {
|
||||||
|
group.add(vc);
|
||||||
|
}
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Ontology ontology(String uri, String name) {
|
||||||
|
Ontology o = new Ontology();
|
||||||
|
o.setURI(uri);
|
||||||
|
o.setName(name);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClassGroup vclassGroup(String uri, String name) {
|
||||||
|
VClassGroup vcg = new VClassGroup();
|
||||||
|
vcg.setURI(uri);
|
||||||
|
vcg.setPublicName(name);
|
||||||
|
return vcg;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,286 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.ASSERTIONS_ONLY;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LANGUAGE_NEUTRAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Datatype;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.DatatypeDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
* DataProperty does not match Ontology, but has child properties that do.
|
||||||
|
*
|
||||||
|
* Name from picklistName
|
||||||
|
* Name from getName
|
||||||
|
* Name from getUri
|
||||||
|
* Name no URL? -- NONSENSICAL
|
||||||
|
*
|
||||||
|
* InternalName from picklistName
|
||||||
|
* InternalName missing.
|
||||||
|
*
|
||||||
|
* Domain class no class URI
|
||||||
|
* Domain class no class for URI
|
||||||
|
* Domain class get picklistName from Language Aware DAO
|
||||||
|
* Domain class use picklistName from Language Neutral DAO
|
||||||
|
*
|
||||||
|
* Range no range URI
|
||||||
|
* Range no datatype for URI
|
||||||
|
* Range datatype has no name
|
||||||
|
* Range has a name
|
||||||
|
*
|
||||||
|
* Group no group URI
|
||||||
|
* Group no group for URI
|
||||||
|
* Group no name
|
||||||
|
* Group has a name
|
||||||
|
*
|
||||||
|
* Children no children
|
||||||
|
* Children sorted by picklist
|
||||||
|
*
|
||||||
|
* DP_1A Ont1, no name, no picklistName, no domainClass, no RangeClass, no GroupURI
|
||||||
|
* DP_1B Ont2, name, no picklistName, no domain class for URI, no range datatype for URI, no group for GroupURI
|
||||||
|
* DP_1B2A Ont1, picklistname, domainclass no picklistname, range datatype with no name, group has no name
|
||||||
|
* DP_1B2B Ont1, picklistname(less than 1B2A), domainclass w/picklistname, range datatype with name, group with name
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ShowDataPropertyHierarchyControllerTest
|
||||||
|
extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "datapropEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String URI_GREATAUNT = ONT1 + "greatAunt";
|
||||||
|
private static final String URI_GRANDMOTHER = ONT2 + "grandmother";
|
||||||
|
private static final String URI_AUNT = ONT1 + "aunt";
|
||||||
|
private static final String URI_MOTHER = ONT1 + "mother";
|
||||||
|
private static final String URI_DAUGHTER = ONT2 + "daughter";
|
||||||
|
private static final String NAME_GRANDMOTHER = "GrandMother";
|
||||||
|
private static final String NAME_AUNT = "Aunt";
|
||||||
|
private static final String NAME_MOTHER = "Mother";
|
||||||
|
private static final String NAME_DAUGHTER = "Me";
|
||||||
|
private static final String PICK_NAME_AUNT = "Old Aunt Agnes";
|
||||||
|
private static final String PICK_NAME_MOTHER = "My Mother";
|
||||||
|
private static final String DOMAIN_NONE = "http://domain/noSuchDomain";
|
||||||
|
private static final String DOMAIN_NO_NAME = "http://domain/domainWithNoName";
|
||||||
|
private static final String DOMAIN_W_NAME = "http://domain/namedDomain";
|
||||||
|
private static final String NAME_DOMAIN = "An excellent domain";
|
||||||
|
private static final String RANGE_NONE = "http://domain/noSuchRange";
|
||||||
|
private static final String RANGE_NO_NAME = "http://domain/rangeWithNoName";
|
||||||
|
private static final String RANGE_W_NAME = "http://domain/namedRange";
|
||||||
|
private static final String NAME_RANGE = "Home on the range";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final ArrayNode NO_DATA_RESPONSE = arrayOf( //
|
||||||
|
propertyHierarchyNode(PATH, "nullfake", "ullfake", "ullfake", "",
|
||||||
|
"", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GRANDMOTHER, "grandmother",
|
||||||
|
"grandmother", "", "http://domain/noSuchRange",
|
||||||
|
"unknown group",
|
||||||
|
propertyHierarchyNode(PATH, URI_MOTHER, PICK_NAME_MOTHER,
|
||||||
|
"My Mother", "namedDomain", "Home on the range",
|
||||||
|
"The Groupsters",
|
||||||
|
propertyHierarchyNode(PATH, URI_DAUGHTER,
|
||||||
|
"daughter", "daughter", "", "",
|
||||||
|
"unspecified")),
|
||||||
|
propertyHierarchyNode(PATH, URI_AUNT, PICK_NAME_AUNT,
|
||||||
|
"Old Aunt Agnes", "domainWithNoName", "", "")),
|
||||||
|
propertyHierarchyNode(PATH, URI_GREATAUNT, "greatAunt", "greatAunt",
|
||||||
|
"", "", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GREATAUNT, "greatAunt", "greatAunt",
|
||||||
|
"", "", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GRANDMOTHER, "grandmother",
|
||||||
|
"grandmother", "", "http://domain/noSuchRange",
|
||||||
|
"unknown group", propertyHierarchyNode(PATH, URI_DAUGHTER,
|
||||||
|
"daughter", "daughter", "", "", "unspecified")));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT3 = arrayOf();
|
||||||
|
|
||||||
|
private ShowDataPropertyHierarchyController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private DatatypeDaoStub ddao;
|
||||||
|
private DataPropertyDaoStub dpdao;
|
||||||
|
private PropertyGroupDaoStub pgdao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ShowDataPropertyHierarchyController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
ddao = new DatatypeDaoStub();
|
||||||
|
|
||||||
|
dpdao = new DataPropertyDaoStub();
|
||||||
|
|
||||||
|
pgdao = new PropertyGroupDaoStub();
|
||||||
|
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setDatatypeDao(ddao);
|
||||||
|
wadf.setDataPropertyDao(dpdao);
|
||||||
|
wadf.setPropertyGroupDao(pgdao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
ASSERTIONS_ONLY);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
LANGUAGE_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noDataTest() throws Exception {
|
||||||
|
// The NO DATA response is not valid JSON unless we kluge it.
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse + "]}";
|
||||||
|
assertKlugedJson(NO_DATA_RESPONSE, kluged);
|
||||||
|
|
||||||
|
// assertMatchingJson(controller, req, NO_DATA_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_UNFILTERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_NO_NAME, null));
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_W_NAME, NAME_DOMAIN));
|
||||||
|
ddao.addDatatype(datatype(RANGE_NO_NAME, null));
|
||||||
|
ddao.addDatatype(datatype(RANGE_W_NAME, NAME_RANGE));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_NO_NAME, null));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_W_NAME, NAME_GROUP));
|
||||||
|
dpdao.addDataProperty(
|
||||||
|
dataProperty(URI_GREATAUNT, null, null, null, null, null));
|
||||||
|
dpdao.addDataProperty(dataProperty(URI_GRANDMOTHER, NAME_GRANDMOTHER,
|
||||||
|
null, DOMAIN_NONE, RANGE_NONE, GROUP_NONE));
|
||||||
|
dpdao.addDataProperty(
|
||||||
|
dataProperty(URI_AUNT, NAME_AUNT, PICK_NAME_AUNT,
|
||||||
|
DOMAIN_NO_NAME, RANGE_NO_NAME, GROUP_NO_NAME),
|
||||||
|
URI_GRANDMOTHER);
|
||||||
|
dpdao.addDataProperty(
|
||||||
|
dataProperty(URI_MOTHER, NAME_MOTHER, PICK_NAME_MOTHER,
|
||||||
|
DOMAIN_W_NAME, RANGE_W_NAME, GROUP_W_NAME),
|
||||||
|
URI_GRANDMOTHER);
|
||||||
|
dpdao.addDataProperty(dataProperty(URI_DAUGHTER, NAME_DAUGHTER, null,
|
||||||
|
null, null, null), URI_MOTHER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataProperty dataProperty(String uri, String name,
|
||||||
|
String pickListName, String domainClassUri, String rangeDatatypeUri,
|
||||||
|
String groupUri) {
|
||||||
|
DataProperty dp = new DataProperty();
|
||||||
|
dp.setURI(uri);
|
||||||
|
dp.setName(name);
|
||||||
|
dp.setPickListName(pickListName);
|
||||||
|
dp.setDomainClassURI(domainClassUri);
|
||||||
|
dp.setRangeDatatypeURI(rangeDatatypeUri);
|
||||||
|
dp.setGroupURI(groupUri);
|
||||||
|
return dp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Datatype datatype(String uri, String name) {
|
||||||
|
Datatype d = new Datatype();
|
||||||
|
d.setUri(uri);
|
||||||
|
d.setName(name);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup propertyGroup(String uri, String name) {
|
||||||
|
PropertyGroup pg = new PropertyGroup();
|
||||||
|
pg.setURI(uri);
|
||||||
|
pg.setName(name);
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name) {
|
||||||
|
VClass vc = vclass(uri);
|
||||||
|
vc.setName(name);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,292 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.ASSERTIONS_ONLY;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LANGUAGE_NEUTRAL;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.POLICY_NEUTRAL;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Datatype;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.DatatypeDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.VClassDaoStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||||
|
import stubs.edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccessFactoryStub;
|
||||||
|
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not a well-formed set of unit tests. But it's a pretty good exercise of the
|
||||||
|
* different possibilities in the output stage.
|
||||||
|
*
|
||||||
|
* Test plan:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* No data - roots is null -- NONSENSICAL
|
||||||
|
* No data - roots is empty
|
||||||
|
*
|
||||||
|
* Ontology is not specified
|
||||||
|
* Ontology is specified and matches
|
||||||
|
* Ontology is specified and does not match
|
||||||
|
* ObjectProperty does not match Ontology, but has child properties that do.
|
||||||
|
*
|
||||||
|
* Name from picklistName
|
||||||
|
* Name from getLocalName
|
||||||
|
* Name no URL? -- NONSENSICAL
|
||||||
|
*
|
||||||
|
* InternalName from localNameWithPrefix
|
||||||
|
* InternalName from localName
|
||||||
|
*
|
||||||
|
* Domain class no class URI
|
||||||
|
* Domain class no class for URI
|
||||||
|
* Domain class get picklistName from Language Aware DAO
|
||||||
|
* Domain class use picklistName from Language Neutral DAO
|
||||||
|
*
|
||||||
|
* Range class no class URI
|
||||||
|
* Range class no class for URI
|
||||||
|
* Range class get picklistName from Language Aware DAO
|
||||||
|
* Range class use picklistName from Language Neutral DAO
|
||||||
|
*
|
||||||
|
* Group no group URI
|
||||||
|
* Group no group for URI
|
||||||
|
* Group no name
|
||||||
|
* Group has a name
|
||||||
|
*
|
||||||
|
* Children no children
|
||||||
|
* Children sorted by picklist
|
||||||
|
*
|
||||||
|
* DP_1A Ont1, no name, no localnamewithprefix, no picklistName, no domainClass, no RangeClass, no GroupURI
|
||||||
|
* DP_1B Ont2, name, no localnamewithprefix, no picklistName, no domain class for URI, no range clqss for URI, no group for GroupURI
|
||||||
|
* DP_1B2A Ont1, name, localnamewithprefix, picklistname, domainclass no picklistname, range class with no picklistname, group has no name
|
||||||
|
* DP_1B2B Ont1, name, localnamewithprefix, picklistname(less than 1B2A), domain class w/picklistname, range class w/picklistname, group with name
|
||||||
|
*
|
||||||
|
* Try once with no data
|
||||||
|
* Try with all data and no ontology specified
|
||||||
|
* Try with all data and Ont1, Ont2, Ont3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
public class ShowObjectPropertyHierarchyControllerTest
|
||||||
|
extends ListControllerTestBase {
|
||||||
|
private static final String PATH = "propertyEdit";
|
||||||
|
private static final String ONT1 = "http://ont1/";
|
||||||
|
private static final String ONT2 = "http://ont2/";
|
||||||
|
private static final String ONT3 = "http://ont3/";
|
||||||
|
private static final String URI_GREATAUNT = ONT1 + "greatAunt";
|
||||||
|
private static final String URI_GRANDMOTHER = ONT2 + "grandmother";
|
||||||
|
private static final String URI_AUNT = ONT1 + "aunt";
|
||||||
|
private static final String URI_MOTHER = ONT1 + "mother";
|
||||||
|
private static final String URI_DAUGHTER = ONT2 + "daughter";
|
||||||
|
private static final String NAME_GRANDMOTHER = "GrandMother";
|
||||||
|
private static final String NAME_AUNT = "Aunt";
|
||||||
|
private static final String NAME_MOTHER = "Mother";
|
||||||
|
private static final String NAME_DAUGHTER = "Me";
|
||||||
|
private static final String LOCAL_NAME_WITH_PREFIX_AUNT = "family:aunt";
|
||||||
|
private static final String LOCAL_NAME_WITH_PREFIX_MOTHER = "family:mother";
|
||||||
|
private static final String DOMAIN_NONE = "http://domain/noSuchDomain";
|
||||||
|
private static final String DOMAIN_NO_NAME = "http://domain/domainWithNoName";
|
||||||
|
private static final String DOMAIN_W_NAME = "http://domain/namedDomain";
|
||||||
|
private static final String NAME_DOMAIN = "An excellent domain";
|
||||||
|
private static final String RANGE_NONE = "http://domain/noSuchRange";
|
||||||
|
private static final String RANGE_NO_NAME = "http://domain/rangeWithNoName";
|
||||||
|
private static final String RANGE_W_NAME = "http://domain/namedRange";
|
||||||
|
private static final String NAME_RANGE = "Home on the range";
|
||||||
|
private static final String GROUP_NONE = "http://domain/noSuchGroup";
|
||||||
|
private static final String GROUP_NO_NAME = "http://domain/groupWithNoName";
|
||||||
|
private static final String GROUP_W_NAME = "http://domain/namedGroup";
|
||||||
|
private static final String NAME_GROUP = "The Groupsters";
|
||||||
|
|
||||||
|
private static final ArrayNode NO_DATA_RESPONSE = arrayOf( //
|
||||||
|
propertyHierarchyNode(PATH, "nullfake", "ullfake", "ullfake", "",
|
||||||
|
"", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_UNFILTERED = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GRANDMOTHER, NAME_GRANDMOTHER,
|
||||||
|
"grandmother", "", "", "unknown group",
|
||||||
|
propertyHierarchyNode(PATH, URI_AUNT, NAME_AUNT,
|
||||||
|
"family:aunt", "domainWithNoName", "", ""),
|
||||||
|
propertyHierarchyNode(PATH, URI_MOTHER, NAME_MOTHER,
|
||||||
|
"family:mother", "namedDomain", "",
|
||||||
|
"The Groupsters",
|
||||||
|
propertyHierarchyNode(PATH, URI_DAUGHTER,
|
||||||
|
NAME_DAUGHTER, "daughter", "", "",
|
||||||
|
"unspecified"))),
|
||||||
|
propertyHierarchyNode(PATH, URI_GREATAUNT, "greatAunt", "greatAunt",
|
||||||
|
"", "", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT1 = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GREATAUNT, "greatAunt", "greatAunt",
|
||||||
|
"", "", "unspecified"));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT2 = arrayOf(
|
||||||
|
propertyHierarchyNode(PATH, URI_GRANDMOTHER, NAME_GRANDMOTHER,
|
||||||
|
"grandmother", "", "", "unknown group",
|
||||||
|
propertyHierarchyNode(PATH, URI_DAUGHTER, NAME_DAUGHTER,
|
||||||
|
"daughter", "", "", "unspecified")));
|
||||||
|
|
||||||
|
private static final ArrayNode RESPONSE_FILTERED_BY_ONT3 = arrayOf();
|
||||||
|
|
||||||
|
private ShowObjectPropertyHierarchyController controller;
|
||||||
|
private HttpServletRequestStub req;
|
||||||
|
private ModelAccessFactoryStub modelsFactory;
|
||||||
|
private WebappDaoFactoryStub wadf;
|
||||||
|
private DatatypeDaoStub ddao;
|
||||||
|
private ObjectPropertyDaoStub opdao;
|
||||||
|
private PropertyGroupDaoStub pgdao;
|
||||||
|
private VClassDaoStub vcdao;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
controller = new ShowObjectPropertyHierarchyController();
|
||||||
|
|
||||||
|
req = new HttpServletRequestStub();
|
||||||
|
new VitroRequest(req).setCollator(Collator.getInstance());
|
||||||
|
|
||||||
|
ddao = new DatatypeDaoStub();
|
||||||
|
|
||||||
|
opdao = new ObjectPropertyDaoStub();
|
||||||
|
|
||||||
|
pgdao = new PropertyGroupDaoStub();
|
||||||
|
|
||||||
|
vcdao = new VClassDaoStub();
|
||||||
|
|
||||||
|
wadf = new WebappDaoFactoryStub();
|
||||||
|
wadf.setDatatypeDao(ddao);
|
||||||
|
wadf.setObjectPropertyDao(opdao);
|
||||||
|
wadf.setPropertyGroupDao(pgdao);
|
||||||
|
wadf.setVClassDao(vcdao);
|
||||||
|
|
||||||
|
modelsFactory = new ModelAccessFactoryStub();
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
ASSERTIONS_ONLY);
|
||||||
|
modelsFactory.get(req).setWebappDaoFactory(wadf, POLICY_NEUTRAL,
|
||||||
|
LANGUAGE_NEUTRAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// The tests
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noDataTest() throws Exception {
|
||||||
|
// The NO DATA response is not valid JSON unless we kluge it.
|
||||||
|
String rawResponse = getJsonFromController(controller, req);
|
||||||
|
String kluged = rawResponse + "]}";
|
||||||
|
assertKlugedJson(NO_DATA_RESPONSE, kluged);
|
||||||
|
|
||||||
|
// assertMatchingJson(controller, req, NO_DATA_RESPONSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unfiltered() throws Exception {
|
||||||
|
populate();
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_UNFILTERED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt1() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT1);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt2() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT2);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filteredByOnt3() throws Exception {
|
||||||
|
populate();
|
||||||
|
req.addParameter("ontologyUri", ONT3);
|
||||||
|
assertMatchingJson(controller, req, RESPONSE_FILTERED_BY_ONT3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void populate() {
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_NO_NAME, null));
|
||||||
|
vcdao.setVClass(vclass(DOMAIN_W_NAME, NAME_DOMAIN));
|
||||||
|
ddao.addDatatype(datatype(RANGE_NO_NAME, null));
|
||||||
|
ddao.addDatatype(datatype(RANGE_W_NAME, NAME_RANGE));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_NO_NAME, null));
|
||||||
|
pgdao.addPropertyGroup(propertyGroup(GROUP_W_NAME, NAME_GROUP));
|
||||||
|
opdao.addObjectProperty(
|
||||||
|
objectProperty(URI_GREATAUNT, null, null, null, null, null));
|
||||||
|
opdao.addObjectProperty(objectProperty(URI_GRANDMOTHER,
|
||||||
|
NAME_GRANDMOTHER, null, DOMAIN_NONE, RANGE_NONE, GROUP_NONE));
|
||||||
|
opdao.addObjectProperty(
|
||||||
|
objectProperty(URI_AUNT, NAME_AUNT, LOCAL_NAME_WITH_PREFIX_AUNT,
|
||||||
|
DOMAIN_NO_NAME, RANGE_NO_NAME, GROUP_NO_NAME),
|
||||||
|
URI_GRANDMOTHER);
|
||||||
|
opdao.addObjectProperty(objectProperty(URI_MOTHER, NAME_MOTHER,
|
||||||
|
LOCAL_NAME_WITH_PREFIX_MOTHER, DOMAIN_W_NAME, RANGE_W_NAME,
|
||||||
|
GROUP_W_NAME), URI_GRANDMOTHER);
|
||||||
|
opdao.addObjectProperty(objectProperty(URI_DAUGHTER, NAME_DAUGHTER,
|
||||||
|
null, null, null, null), URI_MOTHER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObjectProperty objectProperty(String uri, String name,
|
||||||
|
String localNameWithPrefix, String domainClassUri,
|
||||||
|
String rangeDatatypeUri, String groupUri) {
|
||||||
|
ObjectProperty op = new ObjectProperty();
|
||||||
|
op.setURI(uri);
|
||||||
|
op.setPickListName(name);
|
||||||
|
op.setLocalNameWithPrefix(localNameWithPrefix);
|
||||||
|
op.setDomainVClassURI(domainClassUri);
|
||||||
|
op.setDomainPublic(getLocalName(domainClassUri));
|
||||||
|
op.setRangeVClassURI(rangeDatatypeUri);
|
||||||
|
op.setGroupURI(groupUri);
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Datatype datatype(String uri, String name) {
|
||||||
|
Datatype d = new Datatype();
|
||||||
|
d.setUri(uri);
|
||||||
|
d.setName(name);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup propertyGroup(String uri, String name) {
|
||||||
|
PropertyGroup pg = new PropertyGroup();
|
||||||
|
pg.setURI(uri);
|
||||||
|
pg.setName(name);
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri) {
|
||||||
|
VClass vc = new VClass();
|
||||||
|
vc.setURI(uri);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private VClass vclass(String uri, String name) {
|
||||||
|
VClass vc = vclass(uri);
|
||||||
|
vc.setName(name);
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getLocalName(String uri) {
|
||||||
|
if (uri == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
int delimiter = Math.max(uri.lastIndexOf('#'), uri.lastIndexOf('/'));
|
||||||
|
return uri.substring(delimiter + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -196,7 +196,7 @@ public class JsonServletTest extends AbstractTestClass {
|
||||||
setLoggerLevel(JsonServlet.class, Level.FATAL);
|
setLoggerLevel(JsonServlet.class, Level.FATAL);
|
||||||
setLoggerLevel(ModelAccess.class, Level.ERROR);
|
setLoggerLevel(ModelAccess.class, Level.ERROR);
|
||||||
String vclassId = "http://myVclass";
|
String vclassId = "http://myVclass";
|
||||||
vcDao.setVClass(vclassId, new VClass(vclassId));
|
vcDao.setVClass(new VClass(vclassId));
|
||||||
req.addParameter(GET_SEARCH_INDIVIDUALS_BY_VCLASS, "true");
|
req.addParameter(GET_SEARCH_INDIVIDUALS_BY_VCLASS, "true");
|
||||||
req.addParameter(VCLASS_ID, vclassId);
|
req.addParameter(VCLASS_ID, vclassId);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.utils.json;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* quotes,\, \r, \n, \b, \f, \t and other control characters.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class JacksonUtilsTest extends AbstractTestClass {
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Tests for quote()
|
||||||
|
// quotes,\, \r, \n, \b, \f, \t and other control characters.
|
||||||
|
// Originally written as direct comparisons to the net.sf.json version.
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteNull() {
|
||||||
|
assertJacksonQuoted(null, "");
|
||||||
|
// assertNetSfJsonQuoted(null, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteQuote() {
|
||||||
|
assertJacksonQuoted("\"", "\\\"");
|
||||||
|
// assertNetSfJsonQuoted("\"", "\\\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteBackslash() {
|
||||||
|
assertJacksonQuoted("\\", "\\\\");
|
||||||
|
// assertNetSfJsonQuoted("\\", "\\\\");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteReturn() {
|
||||||
|
assertJacksonQuoted("\r", "\\r");
|
||||||
|
// assertNetSfJsonQuoted("\r", "\\r");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteUnicode() {
|
||||||
|
assertJacksonQuoted("\u0007", "\\u0007");
|
||||||
|
// assertNetSfJsonQuoted("\u0007", "\\u0007");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void quoteAssorted() {
|
||||||
|
assertJacksonQuoted("\n\b\f\t", "\\n\\b\\f\\t");
|
||||||
|
// assertNetSfJsonQuoted("\n\b\f\t", "\\n\\b\\f\\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Helper methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private void assertJacksonQuoted(String raw, String expected) {
|
||||||
|
String actual = JacksonUtils.quote(raw);
|
||||||
|
assertEquals("\"" + expected + "\"", actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private void assertNetSfJsonQuoted(String raw, String expected) {
|
||||||
|
// String actual = net.sf.json.util.JSONUtils.quote(raw);
|
||||||
|
// assertEquals("\"" + expected + "\"", actual);
|
||||||
|
// }
|
||||||
|
}
|
|
@ -2,12 +2,15 @@
|
||||||
|
|
||||||
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
import edu.cornell.mannlib.vitro.webapp.beans.DataProperty;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||||
|
@ -26,10 +29,41 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
// Stub infrastructure
|
// Stub infrastructure
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private final Map<String, DataProperty> dpMap = new HashMap<String, DataProperty>();
|
private static class DataPropertyHolder {
|
||||||
|
final DataProperty dprop;
|
||||||
|
final String parentUri;
|
||||||
|
|
||||||
|
DataPropertyHolder(DataProperty dprop, String parentUri) {
|
||||||
|
this.dprop = dprop;
|
||||||
|
this.parentUri = parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataProperty getDataProperty() {
|
||||||
|
return dprop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParentUri() {
|
||||||
|
return parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isRoot() {
|
||||||
|
return parentUri == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean inOntology(String ontologyUri) {
|
||||||
|
return Objects.equal(ontologyUri, dprop.getNamespace());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Map<String, DataPropertyHolder> dataPropertyMap = new HashMap<>();
|
||||||
|
|
||||||
private final Map<String, String> configFilesMap = new HashMap<String, String>();
|
private final Map<String, String> configFilesMap = new HashMap<String, String>();
|
||||||
|
|
||||||
public void addDataProperty(DataProperty dataProperty) {
|
public void addDataProperty(DataProperty dataProperty) {
|
||||||
|
addDataProperty(dataProperty, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDataProperty(DataProperty dataProperty, String parentUri) {
|
||||||
if (dataProperty == null) {
|
if (dataProperty == null) {
|
||||||
throw new NullPointerException("dataProperty may not be null.");
|
throw new NullPointerException("dataProperty may not be null.");
|
||||||
}
|
}
|
||||||
|
@ -39,10 +73,12 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
throw new NullPointerException("uri may not be null.");
|
throw new NullPointerException("uri may not be null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
dpMap.put(uri, dataProperty);
|
dataPropertyMap.put(uri,
|
||||||
|
new DataPropertyHolder(dataProperty, parentUri));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomListViewConfigFileName(DataProperty property, String filename) {
|
public void setCustomListViewConfigFileName(DataProperty property,
|
||||||
|
String filename) {
|
||||||
if (property == null) {
|
if (property == null) {
|
||||||
throw new NullPointerException("property may not be null.");
|
throw new NullPointerException("property may not be null.");
|
||||||
}
|
}
|
||||||
|
@ -54,18 +90,24 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
|
|
||||||
configFilesMap.put(uri, filename);
|
configFilesMap.put(uri, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Stub methods
|
// Stub methods
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DataProperty> getAllDataProperties() {
|
public List<DataProperty> getAllDataProperties() {
|
||||||
return new ArrayList<>(dpMap.values());
|
return dataPropertyMap.values().stream()
|
||||||
|
.map(DataPropertyHolder::getDataProperty).collect(toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataProperty getDataPropertyByURI(String dataPropertyURI) {
|
public DataProperty getDataPropertyByURI(String dataPropertyURI) {
|
||||||
return dpMap.get(dataPropertyURI);
|
if (dataPropertyMap.containsKey(dataPropertyURI)) {
|
||||||
|
return dataPropertyMap.get(dataPropertyURI).getDataProperty();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -79,6 +121,20 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
}
|
}
|
||||||
return configFilesMap.get(uri);
|
return configFilesMap.get(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DataProperty> getRootDataProperties() {
|
||||||
|
return dataPropertyMap.values().stream().filter(DataPropertyHolder::isRoot)
|
||||||
|
.map(DataPropertyHolder::getDataProperty).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSubPropertyURIs(String propertyURI) {
|
||||||
|
return dataPropertyMap.values().stream()
|
||||||
|
.filter(dph -> propertyURI.equals(dph.getParentUri()))
|
||||||
|
.map(dph -> dph.getDataProperty().getURI()).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Un-implemented methods
|
// Un-implemented methods
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
@ -102,7 +158,8 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeSuperproperty(String propertyURI, String superpropertyURI) {
|
public void removeSuperproperty(String propertyURI,
|
||||||
|
String superpropertyURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"PropertyDao.removeSuperproperty() not implemented.");
|
"PropertyDao.removeSuperproperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -159,12 +216,6 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
"PropertyDao.removeEquivalentProperty() not implemented.");
|
"PropertyDao.removeEquivalentProperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getSubPropertyURIs(String propertyURI) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"PropertyDao.getSubPropertyURIs() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getAllSubPropertyURIs(String propertyURI) {
|
public List<String> getAllSubPropertyURIs(String propertyURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -172,7 +223,8 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getSuperPropertyURIs(String propertyURI, boolean direct) {
|
public List<String> getSuperPropertyURIs(String propertyURI,
|
||||||
|
boolean direct) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"PropertyDao.getSuperPropertyURIs() not implemented.");
|
"PropertyDao.getSuperPropertyURIs() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -190,7 +242,8 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<VClass> getClassesWithRestrictionOnProperty(String propertyURI) {
|
public List<VClass> getClassesWithRestrictionOnProperty(
|
||||||
|
String propertyURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"PropertyDao.getClassesWithRestrictionOnProperty() not implemented.");
|
"PropertyDao.getClassesWithRestrictionOnProperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -252,12 +305,6 @@ public class DataPropertyDaoStub implements DataPropertyDao {
|
||||||
"DataPropertyDao.deleteDataProperty() not implemented.");
|
"DataPropertyDao.deleteDataProperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DataProperty> getRootDataProperties() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"DataPropertyDao.getRootDataProperties() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean annotateDataPropertyAsExternalIdentifier(
|
public boolean annotateDataPropertyAsExternalIdentifier(
|
||||||
String dataPropertyURI) {
|
String dataPropertyURI) {
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.Datatype;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.DatatypeDao;
|
||||||
|
|
||||||
|
public class DatatypeDaoStub implements DatatypeDao {
|
||||||
|
|
||||||
|
private final List<Datatype> dtList = new ArrayList<>();
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub infrastructure
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
public void addDatatype(Datatype dt) {
|
||||||
|
dtList.add(dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Datatype getDatatypeByURI(String uri) {
|
||||||
|
for (Datatype dt : dtList) {
|
||||||
|
if (Objects.equal(dt.getUri(), uri)) {
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Un-implemented methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDatatype(Datatype dtp) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.updateDatatype() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDatatype(Datatype dtp) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.deleteDatatype() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDatatype(int id) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.deleteDatatype() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Datatype getDatatypeById(int id) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.getDatatypeById() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDatatypeIdByURI(String uri) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.getDatatypeIdByURI() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Datatype> getAllDatatypes() {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DatatypeDaoStub.getAllDatatypes() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,14 +2,16 @@
|
||||||
|
|
||||||
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
import edu.cornell.mannlib.vitro.webapp.beans.Property;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
|
import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
|
||||||
|
@ -26,12 +28,42 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
// Stub infrastructure
|
// Stub infrastructure
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private final Map<String, ObjectProperty> opMap = new HashMap<String, ObjectProperty>();
|
private static class ObjectPropertyHolder {
|
||||||
private final Map<String, String> configFilesMap = new HashMap<String, String>();
|
final ObjectProperty oprop;
|
||||||
|
final String parentUri;
|
||||||
|
|
||||||
|
ObjectPropertyHolder(ObjectProperty oprop, String parentUri) {
|
||||||
|
this.oprop = oprop;
|
||||||
|
this.parentUri = parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectProperty getObjectProperty() {
|
||||||
|
return oprop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParentUri() {
|
||||||
|
return parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isRoot() {
|
||||||
|
return parentUri == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean inOntology(String ontologyUri) {
|
||||||
|
return Objects.equal(ontologyUri, oprop.getNamespace());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Map<String, ObjectPropertyHolder> objectPropertyMap = new HashMap<>();
|
||||||
|
private final Map<String, String> configFilesMap = new HashMap<>();
|
||||||
|
|
||||||
public void addObjectProperty(ObjectProperty property) {
|
public void addObjectProperty(ObjectProperty property) {
|
||||||
|
addObjectProperty(property, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addObjectProperty(ObjectProperty property, String parentUri) {
|
||||||
if (property == null) {
|
if (property == null) {
|
||||||
throw new NullPointerException("predicate may not be null.");
|
throw new NullPointerException("property may not be null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
String uri = property.getURI();
|
String uri = property.getURI();
|
||||||
|
@ -39,7 +71,8 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
throw new NullPointerException("uri may not be null.");
|
throw new NullPointerException("uri may not be null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
opMap.put(uri, property);
|
objectPropertyMap.put(uri,
|
||||||
|
new ObjectPropertyHolder(property, parentUri));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomListViewConfigFileName(ObjectProperty property,
|
public void setCustomListViewConfigFileName(ObjectProperty property,
|
||||||
|
@ -62,7 +95,8 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ObjectProperty> getAllObjectProperties() {
|
public List<ObjectProperty> getAllObjectProperties() {
|
||||||
return new ArrayList<>(opMap.values());
|
return objectPropertyMap.values().stream()
|
||||||
|
.map(ObjectPropertyHolder::getObjectProperty).collect(toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,7 +104,11 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
if (objectPropertyURI == null) {
|
if (objectPropertyURI == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return opMap.get(objectPropertyURI);
|
if (objectPropertyMap.containsKey(objectPropertyURI)) {
|
||||||
|
return objectPropertyMap.get(objectPropertyURI).getObjectProperty();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -86,7 +124,21 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomListViewConfigFileName(ObjectProperty objectProperty) {
|
public List<ObjectProperty> getRootObjectProperties() {
|
||||||
|
return objectPropertyMap.values().stream().filter(ObjectPropertyHolder::isRoot)
|
||||||
|
.map(ObjectPropertyHolder::getObjectProperty).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSubPropertyURIs(String objectPropertyURI) {
|
||||||
|
return objectPropertyMap.values().stream()
|
||||||
|
.filter(oph -> objectPropertyURI.equals(oph.getParentUri()))
|
||||||
|
.map(oph -> oph.getObjectProperty().getURI()).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCustomListViewConfigFileName(
|
||||||
|
ObjectProperty objectProperty) {
|
||||||
if (objectProperty == null) {
|
if (objectProperty == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +172,8 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeSuperproperty(String propertyURI, String superpropertyURI) {
|
public void removeSuperproperty(String propertyURI,
|
||||||
|
String superpropertyURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"ObjectPropertyDaoStub.removeSuperproperty() not implemented.");
|
"ObjectPropertyDaoStub.removeSuperproperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -196,7 +249,8 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<VClass> getClassesWithRestrictionOnProperty(String propertyURI) {
|
public List<VClass> getClassesWithRestrictionOnProperty(
|
||||||
|
String propertyURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"ObjectPropertyDaoStub.getClassesWithRestrictionOnProperty() not implemented.");
|
"ObjectPropertyDaoStub.getClassesWithRestrictionOnProperty() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -215,12 +269,6 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
"ObjectPropertyDaoStub.getSuperPropertyURIs() not implemented.");
|
"ObjectPropertyDaoStub.getSuperPropertyURIs() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getSubPropertyURIs(String objectPropertyURI) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"ObjectPropertyDaoStub.getSubPropertyURIs() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fillObjectPropertiesForIndividual(Individual individual) {
|
public void fillObjectPropertiesForIndividual(Individual individual) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -258,12 +306,6 @@ public class ObjectPropertyDaoStub implements ObjectPropertyDao {
|
||||||
"ObjectPropertyDaoStub.skipEditForm() not implemented.");
|
"ObjectPropertyDaoStub.skipEditForm() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ObjectProperty> getRootObjectProperties() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"ObjectPropertyDaoStub.getRootObjectProperties() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ObjectProperty> getObjectPropertyList(Individual subject) {
|
public List<ObjectProperty> getObjectPropertyList(Individual subject) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
|
|
@ -38,16 +38,15 @@ public class OntologyDaoStub implements OntologyDao {
|
||||||
return new ArrayList<Ontology>(ontologies.values());
|
return new ArrayList<Ontology>(ontologies.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Ontology getOntologyByURI(String ontologyURI) {
|
||||||
|
return ontologies.get(ontologyURI);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Un-implemented methods
|
// Un-implemented methods
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
@Override
|
|
||||||
public Ontology getOntologyByURI(String ontologyURI) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"OntologyDaoStub.getOntologyByURI() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateOntology(Ontology ontology) {
|
public void updateOntology(Ontology ontology) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao;
|
||||||
|
|
||||||
|
public class PropertyGroupDaoStub implements PropertyGroupDao {
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub infrastructure
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private final Map<String, PropertyGroup> map = new HashMap<>();
|
||||||
|
|
||||||
|
public void addPropertyGroup(PropertyGroup group) {
|
||||||
|
map.put(group.getURI(), group);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyGroup getGroupByURI(String uri) {
|
||||||
|
return (uri == null) ? null : copyGroup(map.get(uri), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PropertyGroup> getPublicGroups(boolean withProperties) {
|
||||||
|
List<PropertyGroup> list = new ArrayList<>();
|
||||||
|
for (PropertyGroup group: map.values()) {
|
||||||
|
list.add(copyGroup(group, withProperties));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PropertyGroup copyGroup(PropertyGroup source, boolean withProperties) {
|
||||||
|
if (source == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyGroup target = new PropertyGroup();
|
||||||
|
|
||||||
|
target.setURI(source.getURI());
|
||||||
|
target.setPickListName(source.getPickListName());
|
||||||
|
|
||||||
|
target.setDisplayRank(source.getDisplayRank());
|
||||||
|
target.setName(source.getName());
|
||||||
|
target.setStatementCount(source.getStatementCount());
|
||||||
|
target.setPublicDescription(source.getPublicDescription());
|
||||||
|
|
||||||
|
if (withProperties) {
|
||||||
|
target.setPropertyList(source.getPropertyList());
|
||||||
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Un-implemented methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int removeUnpopulatedGroups(List<PropertyGroup> groups) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyGroupDaoStub.removeUnpopulatedGroups() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyGroup createDummyPropertyGroup(String name, int rank) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyGroupDaoStub.createDummyPropertyGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String insertNewPropertyGroup(PropertyGroup group) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyGroupDaoStub.insertNewPropertyGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePropertyGroup(PropertyGroup group) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyGroupDaoStub.updatePropertyGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deletePropertyGroup(PropertyGroup group) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyGroupDaoStub.deletePropertyGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyInstance;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.PropertyInstanceIface;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
public class PropertyInstanceDaoStub implements PropertyInstanceDao {
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub infrastructure
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Un-implemented methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteObjectPropertyStatement(String subjectURI,
|
||||||
|
String propertyURI, String objectURI) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.deleteObjectPropertyStatement() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<PropertyInstance> getAllPossiblePropInstForIndividual(
|
||||||
|
String individualURI) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.getAllPossiblePropInstForIndividual() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<PropertyInstance> getAllPropInstByVClass(
|
||||||
|
String classURI) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.getAllPropInstByVClass() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<PropertyInstance> getExistingProperties(String entityURI,
|
||||||
|
String propertyURI) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.getExistingProperties() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyInstance getProperty(String subjectURI, String predicateURI,
|
||||||
|
String objectURI) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.getProperty() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insertProp(PropertyInstanceIface prop) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.insertProp() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertPropertyInstance(PropertyInstance prop) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.insertPropertyInstance() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deletePropertyInstance(PropertyInstance prop) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"PropertyInstanceDaoStub.deletePropertyInstance() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,10 +2,16 @@
|
||||||
|
|
||||||
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.jena.vocabulary.RDF;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Classes2Classes;
|
import edu.cornell.mannlib.vitro.webapp.beans.Classes2Classes;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
|
@ -13,48 +19,95 @@ import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassDao;
|
||||||
|
|
||||||
public class VClassDaoStub implements VClassDao {
|
public class VClassDaoStub implements VClassDao {
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Stub infrastructure
|
// Stub infrastructure
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
private final Map<String, VClass> vclassesByUri = new HashMap<String, VClass>();
|
private static class VClassHolder {
|
||||||
|
final VClass vclass;
|
||||||
|
final String parentUri;
|
||||||
|
|
||||||
public void setVClass(String uri, VClass vclass) {
|
VClassHolder(VClass vclass, String parentUri) {
|
||||||
vclassesByUri.put(uri, vclass);
|
this.vclass = vclass;
|
||||||
|
this.parentUri = parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public VClass getVclass() {
|
||||||
|
return vclass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getParentUri() {
|
||||||
|
return parentUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isRoot() {
|
||||||
|
return parentUri == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean inOntology(String ontologyUri) {
|
||||||
|
return Objects.equal(ontologyUri, vclass.getNamespace());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
private final Map<String, VClassHolder> vclassMap = new HashMap<>();
|
||||||
// Stub methods
|
|
||||||
// ----------------------------------------------------------------------
|
public void setVClass(VClass vclass) {
|
||||||
|
setVClass(vclass, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVClass(VClass vclass, String parentUri) {
|
||||||
|
vclassMap.put(vclass.getURI(), new VClassHolder(vclass, parentUri));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VClass> getAllVclasses() {
|
||||||
|
return vclassMap.values().stream().map(VClassHolder::getVclass)
|
||||||
|
.collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only direct (one-hop) sub-classes.
|
||||||
|
@Override
|
||||||
|
public List<String> getSubClassURIs(String classURI) {
|
||||||
|
return vclassMap.values().stream()
|
||||||
|
.filter(vch -> vch.parentUri == classURI)
|
||||||
|
.map(vch -> vch.getVclass().getURI()).collect(toList());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VClass getVClassByURI(String URI) {
|
public VClass getVClassByURI(String URI) {
|
||||||
return vclassesByUri.get(URI);
|
VClassHolder vch = vclassMap.get(URI);
|
||||||
|
return vch == null ? null : vch.getVclass();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
// Un-implemented methods
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<VClass> getRootClasses() {
|
public List<VClass> getRootClasses() {
|
||||||
throw new RuntimeException(
|
return vclassMap.values().stream().filter(VClassHolder::isRoot)
|
||||||
"VClassDaoStub.getRootClasses() not implemented.");
|
.map(VClassHolder::getVclass).collect(toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<VClass> getOntologyRootClasses(String ontologyURI) {
|
public List<VClass> getOntologyRootClasses(String ontologyURI) {
|
||||||
throw new RuntimeException(
|
return getRootClasses().stream()
|
||||||
"VClassDaoStub.getOntologyRootClasses() not implemented.");
|
.filter(vc -> Objects.equal(ontologyURI, vc.getNamespace()))
|
||||||
|
.collect(toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<VClass> getAllVclasses() {
|
public VClass getTopConcept() {
|
||||||
throw new RuntimeException(
|
VClass top = new VClass();
|
||||||
"VClassDaoStub.getAllVclasses() not implemented.");
|
top.setURI(RDF.getURI() + "Resource");
|
||||||
|
top.setName(top.getLocalName());
|
||||||
|
return top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Un-implemented methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getDisjointWithClassURIs(String vclassURI) {
|
public List<String> getDisjointWithClassURIs(String vclassURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -116,7 +169,8 @@ public class VClassDaoStub implements VClassDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeDisjointWithClass(String classURI, String disjointClassURI) {
|
public void removeDisjointWithClass(String classURI,
|
||||||
|
String disjointClassURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"VClassDaoStub.removeDisjointWithClass() not implemented.");
|
"VClassDaoStub.removeDisjointWithClass() not implemented.");
|
||||||
}
|
}
|
||||||
|
@ -134,17 +188,12 @@ public class VClassDaoStub implements VClassDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeEquivalentClass(String classURI, String equivalentClassURI) {
|
public void removeEquivalentClass(String classURI,
|
||||||
|
String equivalentClassURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
"VClassDaoStub.removeEquivalentClass() not implemented.");
|
"VClassDaoStub.removeEquivalentClass() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getSubClassURIs(String classURI) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"VClassDaoStub.getSubClassURIs() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getAllSubClassURIs(String classURI) {
|
public List<String> getAllSubClassURIs(String classURI) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -251,12 +300,6 @@ public class VClassDaoStub implements VClassDao {
|
||||||
"VClassDaoStub.isSubClassOf() not implemented.");
|
"VClassDaoStub.isSubClassOf() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public VClass getTopConcept() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"VClassDaoStub.getTopConcept() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VClass getBottomConcept() {
|
public VClass getBottomConcept() {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
package stubs.edu.cornell.mannlib.vitro.webapp.dao;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.jena.ext.com.google.common.base.Objects;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao;
|
||||||
|
|
||||||
|
public class VClassGroupDaoStub implements VClassGroupDao {
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub infrastructure
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private List<VClassGroup> groups = new ArrayList<>();
|
||||||
|
|
||||||
|
public void setGroups(VClassGroup... groups) {
|
||||||
|
this.groups = new ArrayList<>(Arrays.asList(groups));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Stub methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VClassGroup getGroupByURI(String uri) {
|
||||||
|
for (VClassGroup group: groups) {
|
||||||
|
if (Objects.equal(group.getURI(), uri)) {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VClassGroup> getPublicGroupsWithVClasses() {
|
||||||
|
List<VClassGroup> list = new ArrayList<>();
|
||||||
|
for (VClassGroup group: groups) {
|
||||||
|
if (!group.isEmpty()) {
|
||||||
|
list.add(group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Un-implemented methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LinkedHashMap<String, VClassGroup> getClassGroupMap() {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.getClassGroupMap() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VClassGroup> getPublicGroupsWithVClasses(boolean displayOrder) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.getPublicGroupsWithVClasses() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VClassGroup> getPublicGroupsWithVClasses(boolean displayOrder,
|
||||||
|
boolean includeUninstantiatedClasses) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.getPublicGroupsWithVClasses() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<VClassGroup> getPublicGroupsWithVClasses(boolean displayOrder,
|
||||||
|
boolean includeUninstantiatedClasses, boolean getIndividualCount) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.getPublicGroupsWithVClasses() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sortGroupList(List<VClassGroup> groupList) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.sortGroupList() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int removeUnpopulatedGroups(List<VClassGroup> groups) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.removeUnpopulatedGroups() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insertNewVClassGroup(VClassGroup vcg) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.insertNewVClassGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateVClassGroup(VClassGroup vcg) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.updateVClassGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteVClassGroup(VClassGroup vcg) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.deleteVClassGroup() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VClassGroup getGroupByName(String vcgName) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"VClassGroupDaoStub.getGroupByName() not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -38,14 +38,18 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
private String defaultNamespace;
|
private String defaultNamespace;
|
||||||
private ApplicationDao applicationDao;
|
private ApplicationDao applicationDao;
|
||||||
private DataPropertyDao dataPropertyDao;
|
private DataPropertyDao dataPropertyDao;
|
||||||
|
private DatatypeDao datatypeDao;
|
||||||
|
private FauxPropertyDao fauxPropertyDao;
|
||||||
private IndividualDao individualDao;
|
private IndividualDao individualDao;
|
||||||
private MenuDao menuDao;
|
private MenuDao menuDao;
|
||||||
private ObjectPropertyDao objectPropertyDao;
|
private ObjectPropertyDao objectPropertyDao;
|
||||||
private ObjectPropertyStatementDao objectPropertyStatementDao;
|
private ObjectPropertyStatementDao objectPropertyStatementDao;
|
||||||
private FauxPropertyDao fauxPropertyDao;
|
|
||||||
private OntologyDao ontologyDao;
|
private OntologyDao ontologyDao;
|
||||||
|
private PropertyGroupDao propertyGroupDao;
|
||||||
|
private PropertyInstanceDao propertyInstanceDao;
|
||||||
private UserAccountsDao userAccountsDao;
|
private UserAccountsDao userAccountsDao;
|
||||||
private VClassDao vClassDao;
|
private VClassDao vClassDao;
|
||||||
|
private VClassGroupDao vClassGroupDao;
|
||||||
|
|
||||||
public void setDefaultNamespace(String defaultNamespace) {
|
public void setDefaultNamespace(String defaultNamespace) {
|
||||||
this.defaultNamespace = defaultNamespace;
|
this.defaultNamespace = defaultNamespace;
|
||||||
|
@ -59,6 +63,14 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
this.dataPropertyDao = dataPropertyDao;
|
this.dataPropertyDao = dataPropertyDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDatatypeDao(DatatypeDao datatypeDao) {
|
||||||
|
this.datatypeDao = datatypeDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFauxPropertyDao(FauxPropertyDao fauxPropertyDao) {
|
||||||
|
this.fauxPropertyDao = fauxPropertyDao;
|
||||||
|
}
|
||||||
|
|
||||||
public void setIndividualDao(IndividualDao individualDao) {
|
public void setIndividualDao(IndividualDao individualDao) {
|
||||||
this.individualDao = individualDao;
|
this.individualDao = individualDao;
|
||||||
}
|
}
|
||||||
|
@ -76,14 +88,19 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
this.objectPropertyStatementDao = objectPropertyStatementDao;
|
this.objectPropertyStatementDao = objectPropertyStatementDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFauxPropertyDao(FauxPropertyDao fauxPropertyDao) {
|
|
||||||
this.fauxPropertyDao = fauxPropertyDao;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOntologyDao(OntologyDao ontologyDao) {
|
public void setOntologyDao(OntologyDao ontologyDao) {
|
||||||
this.ontologyDao = ontologyDao;
|
this.ontologyDao = ontologyDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPropertyGroupDao(PropertyGroupDao propertyGroupDao) {
|
||||||
|
this.propertyGroupDao = propertyGroupDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyInstanceDao(
|
||||||
|
PropertyInstanceDao propertyInstanceDao) {
|
||||||
|
this.propertyInstanceDao = propertyInstanceDao;
|
||||||
|
}
|
||||||
|
|
||||||
public void setUserAccountsDao(UserAccountsDao userAccountsDao) {
|
public void setUserAccountsDao(UserAccountsDao userAccountsDao) {
|
||||||
this.userAccountsDao = userAccountsDao;
|
this.userAccountsDao = userAccountsDao;
|
||||||
}
|
}
|
||||||
|
@ -92,6 +109,10 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
this.vClassDao = vClassDao;
|
this.vClassDao = vClassDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setVClassGroupDao(VClassGroupDao vClassGroupDao) {
|
||||||
|
this.vClassGroupDao = vClassGroupDao;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Stub methods
|
// Stub methods
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
@ -111,6 +132,11 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
return this.dataPropertyDao;
|
return this.dataPropertyDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DatatypeDao getDatatypeDao() {
|
||||||
|
return this.datatypeDao;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IndividualDao getIndividualDao() {
|
public IndividualDao getIndividualDao() {
|
||||||
return this.individualDao;
|
return this.individualDao;
|
||||||
|
@ -141,6 +167,16 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
return this.ontologyDao;
|
return this.ontologyDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyGroupDao getPropertyGroupDao() {
|
||||||
|
return this.propertyGroupDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyInstanceDao getPropertyInstanceDao() {
|
||||||
|
return this.propertyInstanceDao;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserAccountsDao getUserAccountsDao() {
|
public UserAccountsDao getUserAccountsDao() {
|
||||||
return this.userAccountsDao;
|
return this.userAccountsDao;
|
||||||
|
@ -151,6 +187,11 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
return this.vClassDao;
|
return this.vClassDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VClassGroupDao getVClassGroupDao() {
|
||||||
|
return this.vClassGroupDao;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Un-implemented methods
|
// Un-implemented methods
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
@ -203,12 +244,6 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
"WebappDaoFactory.getUserURI() not implemented.");
|
"WebappDaoFactory.getUserURI() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public DatatypeDao getDatatypeDao() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"WebappDaoFactory.getDatatypeDao() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataPropertyStatementDao getDataPropertyStatementDao() {
|
public DataPropertyStatementDao getDataPropertyStatementDao() {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
@ -221,24 +256,6 @@ public class WebappDaoFactoryStub implements WebappDaoFactory {
|
||||||
"WebappDaoFactory.getDisplayModelDao() not implemented.");
|
"WebappDaoFactory.getDisplayModelDao() not implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public VClassGroupDao getVClassGroupDao() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"WebappDaoFactory.getVClassGroupDao() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PropertyGroupDao getPropertyGroupDao() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"WebappDaoFactory.getPropertyGroupDao() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PropertyInstanceDao getPropertyInstanceDao() {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"WebappDaoFactory.getPropertyInstanceDao() not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageDao getPageDao() {
|
public PageDao getPageDao() {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
|
|
6
dependencies/pom.xml
vendored
6
dependencies/pom.xml
vendored
|
@ -147,12 +147,6 @@
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>net.sf.json-lib</groupId>
|
|
||||||
<artifactId>json-lib</artifactId>
|
|
||||||
<version>2.2.2</version>
|
|
||||||
<classifier>jdk15</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.sf.saxon</groupId>
|
<groupId>net.sf.saxon</groupId>
|
||||||
<artifactId>Saxon-HE</artifactId>
|
<artifactId>Saxon-HE</artifactId>
|
||||||
|
|
Loading…
Add table
Reference in a new issue