Replacement of language comparisons using '=' by the 'langMatches'
function
This commit is contained in:
parent
2e682e6f38
commit
542d1c30ef
1 changed files with 403 additions and 400 deletions
|
@ -52,463 +52,466 @@ import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter;
|
||||||
* TODO Get rid of this when the Application Ontology is implemented.
|
* TODO Get rid of this when the Application Ontology is implemented.
|
||||||
*/
|
*/
|
||||||
public class FakeApplicationOntologyService {
|
public class FakeApplicationOntologyService {
|
||||||
private static final Log log = LogFactory
|
private static final Log log = LogFactory
|
||||||
.getLog(FakeApplicationOntologyService.class);
|
.getLog(FakeApplicationOntologyService.class);
|
||||||
|
|
||||||
public static final String FILE_OF_SHORT_VIEW_INFO = "/WEB-INF/resources/shortview_config.n3";
|
public static final String FILE_OF_SHORT_VIEW_INFO = "/WEB-INF/resources/shortview_config.n3";
|
||||||
|
|
||||||
private static final String NS = "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#";
|
private static final String NS = "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#";
|
||||||
private static final String HAS_TEMPLATE = NS + "hasTemplate";
|
private static final String HAS_TEMPLATE = NS + "hasTemplate";
|
||||||
private static final String CUSTOM_VIEW = NS + "customViewForIndividual";
|
private static final String CUSTOM_VIEW = NS + "customViewForIndividual";
|
||||||
private static final String APPLIES_TO = NS + "appliesToContext";
|
private static final String APPLIES_TO = NS + "appliesToContext";
|
||||||
private static final String HAS_DATA_GETTER = NS + "hasDataGetter";
|
private static final String HAS_DATA_GETTER = NS + "hasDataGetter";
|
||||||
private static final String HAS_VIEW = NS + "hasCustomView";
|
private static final String HAS_VIEW = NS + "hasCustomView";
|
||||||
private static final String RDF_TYPE = VitroVocabulary.RDF_TYPE;
|
private static final String RDF_TYPE = VitroVocabulary.RDF_TYPE;
|
||||||
|
|
||||||
private final OntModel viewModel;
|
private final OntModel viewModel;
|
||||||
private final Map<String, List<ViewSpec>> classUriToViewSpecs;
|
private final Map<String, List<ViewSpec>> classUriToViewSpecs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the model from the config file, and inspect it for Views and
|
* Load the model from the config file, and inspect it for Views and
|
||||||
* mappings.
|
* mappings.
|
||||||
*
|
*
|
||||||
* Keep the model - we'll need it when its time to create the DataGetters
|
* Keep the model - we'll need it when its time to create the DataGetters
|
||||||
* (on each request).
|
* (on each request).
|
||||||
*/
|
*/
|
||||||
public FakeApplicationOntologyService(ServletContext ctx)
|
public FakeApplicationOntologyService(ServletContext ctx)
|
||||||
throws ShortViewConfigException {
|
throws ShortViewConfigException {
|
||||||
this.viewModel = createModelFromFile(ctx);
|
this.viewModel = createModelFromFile(ctx);
|
||||||
|
|
||||||
Map<String, ViewSpec> viewSpecsByUri = createViewSpecs();
|
Map<String, ViewSpec> viewSpecsByUri = createViewSpecs();
|
||||||
this.classUriToViewSpecs = createClassMappings(viewSpecsByUri);
|
this.classUriToViewSpecs = createClassMappings(viewSpecsByUri);
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Mapping: " + classUriToViewSpecs);
|
log.debug("Mapping: " + classUriToViewSpecs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If we fail to parse the config file, use this constructor instead, to
|
* If we fail to parse the config file, use this constructor instead, to
|
||||||
* simulate an empty config file.
|
* simulate an empty config file.
|
||||||
*/
|
*/
|
||||||
public FakeApplicationOntologyService() {
|
public FakeApplicationOntologyService() {
|
||||||
this.viewModel = ModelFactory
|
this.viewModel = ModelFactory
|
||||||
.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
||||||
this.classUriToViewSpecs = new HashMap<String, List<ViewSpec>>();
|
this.classUriToViewSpecs = new HashMap<String, List<ViewSpec>>();
|
||||||
|
|
||||||
log.debug("Created empty FakeApplicationOntologyService.");
|
log.debug("Created empty FakeApplicationOntologyService.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the short view config file into an OntModel.
|
* Load the short view config file into an OntModel.
|
||||||
*/
|
*/
|
||||||
private OntModel createModelFromFile(ServletContext ctx)
|
private OntModel createModelFromFile(ServletContext ctx)
|
||||||
throws ShortViewConfigException {
|
throws ShortViewConfigException {
|
||||||
InputStream stream = ctx.getResourceAsStream(FILE_OF_SHORT_VIEW_INFO);
|
InputStream stream = ctx.getResourceAsStream(FILE_OF_SHORT_VIEW_INFO);
|
||||||
if (stream == null) {
|
if (stream == null) {
|
||||||
throw new ShortViewConfigException("The short view config file "
|
throw new ShortViewConfigException("The short view config file "
|
||||||
+ "doesn't exist in the servlet context: '"
|
+ "doesn't exist in the servlet context: '"
|
||||||
+ FILE_OF_SHORT_VIEW_INFO + "'");
|
+ FILE_OF_SHORT_VIEW_INFO + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
||||||
try {
|
try {
|
||||||
m.read(stream, null, "N3");
|
m.read(stream, null, "N3");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new ShortViewConfigException(
|
throw new ShortViewConfigException(
|
||||||
"Parsing error in the short view config file.", e);
|
"Parsing error in the short view config file.", e);
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
stream.close();
|
stream.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug("Loaded " + m.size() + " statements");
|
log.debug("Loaded " + m.size() + " statements");
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find all of the views.
|
* Find all of the views.
|
||||||
*/
|
*/
|
||||||
private Map<String, ViewSpec> createViewSpecs()
|
private Map<String, ViewSpec> createViewSpecs()
|
||||||
throws ShortViewConfigException {
|
throws ShortViewConfigException {
|
||||||
Property rdfType = viewModel.getProperty(RDF_TYPE);
|
Property rdfType = viewModel.getProperty(RDF_TYPE);
|
||||||
Property appliesTo = viewModel.getProperty(APPLIES_TO);
|
Property appliesTo = viewModel.getProperty(APPLIES_TO);
|
||||||
Property dataGetter = viewModel.getProperty(HAS_DATA_GETTER);
|
Property dataGetter = viewModel.getProperty(HAS_DATA_GETTER);
|
||||||
Property template = viewModel.getProperty(HAS_TEMPLATE);
|
Property template = viewModel.getProperty(HAS_TEMPLATE);
|
||||||
Resource customView = viewModel.getResource(CUSTOM_VIEW);
|
Resource customView = viewModel.getResource(CUSTOM_VIEW);
|
||||||
|
|
||||||
ResIterator views = viewModel.listResourcesWithProperty(rdfType,
|
ResIterator views = viewModel.listResourcesWithProperty(rdfType,
|
||||||
customView);
|
customView);
|
||||||
try {
|
try {
|
||||||
Map<String, ViewSpec> map = new HashMap<String, ViewSpec>();
|
Map<String, ViewSpec> map = new HashMap<String, ViewSpec>();
|
||||||
while (views.hasNext()) {
|
while (views.hasNext()) {
|
||||||
Resource view = views.next();
|
Resource view = views.next();
|
||||||
List<String> contextNames = getDataPropertyValues(view,
|
List<String> contextNames = getDataPropertyValues(view,
|
||||||
appliesTo, "context");
|
appliesTo, "context");
|
||||||
List<ShortViewContext> contexts = contextsFromNames(view,
|
List<ShortViewContext> contexts = contextsFromNames(view,
|
||||||
contextNames);
|
contextNames);
|
||||||
List<String> dataGetterUris = getObjectPropertyValues(view,
|
List<String> dataGetterUris = getObjectPropertyValues(view,
|
||||||
dataGetter, "data getter");
|
dataGetter, "data getter");
|
||||||
String tn = getDataProperty(view, template);
|
String tn = getDataProperty(view, template);
|
||||||
map.put(view.getURI(), new ViewSpec(view.getURI(), contexts,
|
map.put(view.getURI(), new ViewSpec(view.getURI(), contexts,
|
||||||
dataGetterUris, tn));
|
dataGetterUris, tn));
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
} finally {
|
} finally {
|
||||||
views.close();
|
views.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Got a list of context names. Make sure that each one actually represents
|
* Got a list of context names. Make sure that each one actually represents
|
||||||
* a known context.
|
* a known context.
|
||||||
*/
|
*/
|
||||||
private List<ShortViewContext> contextsFromNames(Resource view,
|
private List<ShortViewContext> contextsFromNames(Resource view,
|
||||||
List<String> contextNames) throws ShortViewConfigException {
|
List<String> contextNames) throws ShortViewConfigException {
|
||||||
List<ShortViewContext> list = new ArrayList<ShortViewContext>();
|
List<ShortViewContext> list = new ArrayList<ShortViewContext>();
|
||||||
for (String name : contextNames) {
|
for (String name : contextNames) {
|
||||||
ShortViewContext context = ShortViewContext.fromString(name);
|
ShortViewContext context = ShortViewContext.fromString(name);
|
||||||
if (context == null) {
|
if (context == null) {
|
||||||
throw new ShortViewConfigException("Unrecognized context '"
|
throw new ShortViewConfigException("Unrecognized context '"
|
||||||
+ name + "' for view '" + view.getURI() + "'");
|
+ name + "' for view '" + view.getURI() + "'");
|
||||||
}
|
}
|
||||||
list.add(context);
|
list.add(context);
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a map of classes to views.
|
* Create a map of classes to views.
|
||||||
*/
|
*/
|
||||||
private Map<String, List<ViewSpec>> createClassMappings(
|
private Map<String, List<ViewSpec>> createClassMappings(
|
||||||
Map<String, ViewSpec> viewSpecsByUri)
|
Map<String, ViewSpec> viewSpecsByUri)
|
||||||
throws ShortViewConfigException {
|
throws ShortViewConfigException {
|
||||||
Property hasView = viewModel.getProperty(HAS_VIEW);
|
Property hasView = viewModel.getProperty(HAS_VIEW);
|
||||||
|
|
||||||
StmtIterator stmts = viewModel.listStatements(null, hasView,
|
StmtIterator stmts = viewModel.listStatements(null, hasView,
|
||||||
(RDFNode) null);
|
(RDFNode) null);
|
||||||
try {
|
try {
|
||||||
Map<String, List<ViewSpec>> map = new HashMap<String, List<ViewSpec>>();
|
Map<String, List<ViewSpec>> map = new HashMap<String, List<ViewSpec>>();
|
||||||
while (stmts.hasNext()) {
|
while (stmts.hasNext()) {
|
||||||
Statement s = stmts.next();
|
Statement s = stmts.next();
|
||||||
|
|
||||||
String classUri = s.getSubject().getURI();
|
String classUri = s.getSubject().getURI();
|
||||||
|
|
||||||
RDFNode node = s.getObject();
|
RDFNode node = s.getObject();
|
||||||
if (!node.isResource()) {
|
if (!node.isResource()) {
|
||||||
throw new ShortViewConfigException("The hasCustomView"
|
throw new ShortViewConfigException("The hasCustomView"
|
||||||
+ " property for '" + classUri
|
+ " property for '" + classUri
|
||||||
+ "' must be a resource.");
|
+ "' must be a resource.");
|
||||||
}
|
}
|
||||||
String viewUri = node.asResource().getURI();
|
String viewUri = node.asResource().getURI();
|
||||||
|
|
||||||
ViewSpec view = viewSpecsByUri.get(viewUri);
|
ViewSpec view = viewSpecsByUri.get(viewUri);
|
||||||
if (view == null) {
|
if (view == null) {
|
||||||
throw new ShortViewConfigException("On '" + classUri
|
throw new ShortViewConfigException("On '" + classUri
|
||||||
+ "', the view '" + viewUri + "' does not exist.");
|
+ "', the view '" + viewUri + "' does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!map.containsKey(classUri)) {
|
if (!map.containsKey(classUri)) {
|
||||||
map.put(classUri, new ArrayList<ViewSpec>());
|
map.put(classUri, new ArrayList<ViewSpec>());
|
||||||
}
|
}
|
||||||
map.get(classUri).add(view);
|
map.get(classUri).add(view);
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
} finally {
|
} finally {
|
||||||
stmts.close();
|
stmts.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getDataProperty(Resource subject, Property predicate)
|
private String getDataProperty(Resource subject, Property predicate)
|
||||||
throws ShortViewConfigException {
|
throws ShortViewConfigException {
|
||||||
Statement s = viewModel.getProperty(subject, predicate);
|
Statement s = viewModel.getProperty(subject, predicate);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
throw new ShortViewConfigException("The required property '"
|
throw new ShortViewConfigException("The required property '"
|
||||||
+ predicate.getURI() + "' is not present for '"
|
+ predicate.getURI() + "' is not present for '"
|
||||||
+ subject.getURI() + "'");
|
+ subject.getURI() + "'");
|
||||||
}
|
}
|
||||||
RDFNode node = s.getObject();
|
RDFNode node = s.getObject();
|
||||||
if (!node.isLiteral())
|
if (!node.isLiteral())
|
||||||
throw new ShortViewConfigException("The value of '"
|
throw new ShortViewConfigException("The value of '"
|
||||||
+ predicate.getURI() + "' for '" + subject.getURI()
|
+ predicate.getURI() + "' for '" + subject.getURI()
|
||||||
+ "' must be a literal.");
|
+ "' must be a literal.");
|
||||||
return node.asLiteral().getString();
|
return node.asLiteral().getString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getDataPropertyValues(Resource subject,
|
private List<String> getDataPropertyValues(Resource subject,
|
||||||
Property predicate, String label) throws ShortViewConfigException {
|
Property predicate, String label) throws ShortViewConfigException {
|
||||||
StmtIterator stmts = viewModel.listStatements(subject, predicate,
|
StmtIterator stmts = viewModel.listStatements(subject, predicate,
|
||||||
(RDFNode) null);
|
(RDFNode) null);
|
||||||
try {
|
try {
|
||||||
List<String> list = new ArrayList<String>();
|
List<String> list = new ArrayList<String>();
|
||||||
while (stmts.hasNext()) {
|
while (stmts.hasNext()) {
|
||||||
Statement stmt = stmts.next();
|
Statement stmt = stmts.next();
|
||||||
RDFNode node = stmt.getObject();
|
RDFNode node = stmt.getObject();
|
||||||
if (!node.isLiteral()) {
|
if (!node.isLiteral()) {
|
||||||
throw new ShortViewConfigException("The " + label
|
throw new ShortViewConfigException("The " + label
|
||||||
+ " property for '" + subject.getURI()
|
+ " property for '" + subject.getURI()
|
||||||
+ "' must be a literal.");
|
+ "' must be a literal.");
|
||||||
}
|
}
|
||||||
list.add(node.asLiteral().getString());
|
list.add(node.asLiteral().getString());
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
} finally {
|
} finally {
|
||||||
stmts.close();
|
stmts.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getObjectPropertyValues(Resource subject,
|
private List<String> getObjectPropertyValues(Resource subject,
|
||||||
Property predicate, String label) throws ShortViewConfigException {
|
Property predicate, String label) throws ShortViewConfigException {
|
||||||
StmtIterator stmts = viewModel.listStatements(subject, predicate,
|
StmtIterator stmts = viewModel.listStatements(subject, predicate,
|
||||||
(RDFNode) null);
|
(RDFNode) null);
|
||||||
try {
|
try {
|
||||||
List<String> list = new ArrayList<String>();
|
List<String> list = new ArrayList<String>();
|
||||||
while (stmts.hasNext()) {
|
while (stmts.hasNext()) {
|
||||||
Statement stmt = stmts.next();
|
Statement stmt = stmts.next();
|
||||||
RDFNode node = stmt.getObject();
|
RDFNode node = stmt.getObject();
|
||||||
if (!node.isResource()) {
|
if (!node.isResource()) {
|
||||||
throw new ShortViewConfigException("The " + label
|
throw new ShortViewConfigException("The " + label
|
||||||
+ " property for '" + subject.getURI()
|
+ " property for '" + subject.getURI()
|
||||||
+ "' must be a resource.");
|
+ "' must be a resource.");
|
||||||
}
|
}
|
||||||
list.add(node.asResource().getURI());
|
list.add(node.asResource().getURI());
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
} finally {
|
} finally {
|
||||||
stmts.close();
|
stmts.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the template name and DataGetter instances associated with this
|
* Return the template name and DataGetter instances associated with this
|
||||||
* class and this short view context. If none, return null.
|
* class and this short view context. If none, return null.
|
||||||
*/
|
*/
|
||||||
public TemplateAndDataGetters getShortViewProperties(VitroRequest vreq,
|
public TemplateAndDataGetters getShortViewProperties(VitroRequest vreq,
|
||||||
Individual individual, String classUri, String contextName) {
|
Individual individual, String classUri, String contextName) {
|
||||||
/*
|
/*
|
||||||
* If we have a mapping for this class that applies to this context,
|
* If we have a mapping for this class that applies to this context,
|
||||||
* construct the DataGetter instances and return them with the template.
|
* construct the DataGetter instances and return them with the template.
|
||||||
*/
|
*/
|
||||||
if (classUriToViewSpecs.containsKey(classUri)) {
|
if (classUriToViewSpecs.containsKey(classUri)) {
|
||||||
for (ViewSpec view : classUriToViewSpecs.get(classUri)) {
|
for (ViewSpec view : classUriToViewSpecs.get(classUri)) {
|
||||||
for (ShortViewContext context : view.getContexts()) {
|
for (ShortViewContext context : view.getContexts()) {
|
||||||
if (context.name().equalsIgnoreCase(contextName)) {
|
if (context.name().equalsIgnoreCase(contextName)) {
|
||||||
List<DataGetter> dgList = new ArrayList<DataGetter>();
|
List<DataGetter> dgList = new ArrayList<DataGetter>();
|
||||||
for (String dgUri : view.getDataGetterUris()) {
|
for (String dgUri : view.getDataGetterUris()) {
|
||||||
dgList.add(new SparqlQueryDataGetter(vreq,
|
dgList.add(new SparqlQueryDataGetter(vreq,
|
||||||
viewModel, dgUri));
|
viewModel, dgUri));
|
||||||
}
|
}
|
||||||
return new TemplateAndDataGetters(
|
return new TemplateAndDataGetters(
|
||||||
view.getTemplateName(),
|
view.getTemplateName(),
|
||||||
dgList.toArray(new DataGetter[0]));
|
dgList.toArray(new DataGetter[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Otherwise, check for this hard-coded kluge. Any class in the People
|
* Otherwise, check for this hard-coded kluge. Any class in the People
|
||||||
* class group gets a special view with preferred title.
|
* class group gets a special view with preferred title.
|
||||||
*/
|
*/
|
||||||
if ((BROWSE.name().equals(contextName))
|
if ((BROWSE.name().equals(contextName))
|
||||||
&& (isClassInPeopleClassGroup(vreq.getWebappDaoFactory(),
|
&& (isClassInPeopleClassGroup(vreq.getWebappDaoFactory(),
|
||||||
classUri))) {
|
classUri))) {
|
||||||
return new TemplateAndDataGetters("view-browse-people.ftl",
|
return new TemplateAndDataGetters("view-browse-people.ftl",
|
||||||
new FakeVivoPeopleDataGetter(vreq, individual.getURI()));
|
new FakeVivoPeopleDataGetter(vreq, individual.getURI()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Otherwise, no custom view.
|
* Otherwise, no custom view.
|
||||||
*/
|
*/
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isClassInPeopleClassGroup(WebappDaoFactory wadf,
|
private boolean isClassInPeopleClassGroup(WebappDaoFactory wadf,
|
||||||
String classUri) {
|
String classUri) {
|
||||||
if (wadf == null) {
|
if (wadf == null) {
|
||||||
log.debug("isClassInPeopleClassGroup: WebappDaoFactory is null.");
|
log.debug("isClassInPeopleClassGroup: WebappDaoFactory is null.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
VClassDao vcDao = wadf.getVClassDao();
|
VClassDao vcDao = wadf.getVClassDao();
|
||||||
if (vcDao == null) {
|
if (vcDao == null) {
|
||||||
log.debug("isClassInPeopleClassGroup: VClassDao is null.");
|
log.debug("isClassInPeopleClassGroup: VClassDao is null.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
VClass vclass = vcDao.getVClassByURI(classUri);
|
VClass vclass = vcDao.getVClassByURI(classUri);
|
||||||
if (vclass == null) {
|
if (vclass == null) {
|
||||||
log.debug("isClassInPeopleClassGroup: VClass is null.");
|
log.debug("isClassInPeopleClassGroup: VClass is null.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String vclassGroupUri = vclass.getGroupURI();
|
String vclassGroupUri = vclass.getGroupURI();
|
||||||
if (vclassGroupUri == null) {
|
if (vclassGroupUri == null) {
|
||||||
log.debug("isClassInPeopleClassGroup: vclassGroupUri is null.");
|
log.debug("isClassInPeopleClassGroup: vclassGroupUri is null.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isPeople = PEOPLE_CLASSGROUP_URI.equals(vclassGroupUri);
|
boolean isPeople = PEOPLE_CLASSGROUP_URI.equals(vclassGroupUri);
|
||||||
log.debug("isClassInPeopleClassGroup: isPeople = " + isPeople);
|
log.debug("isClassInPeopleClassGroup: isPeople = " + isPeople);
|
||||||
return isPeople;
|
return isPeople;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Helper classes
|
// Helper classes
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
/** The info associated with a short view. */
|
/** The info associated with a short view. */
|
||||||
public static class TemplateAndDataGetters {
|
public static class TemplateAndDataGetters {
|
||||||
private final String templateName;
|
private final String templateName;
|
||||||
private final Set<DataGetter> dataGetters;
|
private final Set<DataGetter> dataGetters;
|
||||||
|
|
||||||
public TemplateAndDataGetters(String templateName,
|
public TemplateAndDataGetters(String templateName,
|
||||||
DataGetter... dataGetters) {
|
DataGetter... dataGetters) {
|
||||||
this.templateName = templateName;
|
this.templateName = templateName;
|
||||||
this.dataGetters = new HashSet<DataGetter>(
|
this.dataGetters = new HashSet<DataGetter>(
|
||||||
Arrays.asList(dataGetters));
|
Arrays.asList(dataGetters));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTemplateName() {
|
public String getTemplateName() {
|
||||||
return templateName;
|
return templateName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<DataGetter> getDataGetters() {
|
public Set<DataGetter> getDataGetters() {
|
||||||
return dataGetters;
|
return dataGetters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "[template=" + templateName + ", dataGetters=" + dataGetters
|
return "[template=" + templateName + ", dataGetters=" + dataGetters
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The view specifications that we read from the config file. */
|
/** The view specifications that we read from the config file. */
|
||||||
private class ViewSpec {
|
private class ViewSpec {
|
||||||
private final String uri;
|
private final String uri;
|
||||||
private final List<ShortViewContext> contexts;
|
private final List<ShortViewContext> contexts;
|
||||||
private final List<String> dataGetterUris;
|
private final List<String> dataGetterUris;
|
||||||
private final String templateName;
|
private final String templateName;
|
||||||
|
|
||||||
public ViewSpec(String uri, List<ShortViewContext> contexts,
|
public ViewSpec(String uri, List<ShortViewContext> contexts,
|
||||||
List<String> dataGetterUris, String templateName) {
|
List<String> dataGetterUris, String templateName) {
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.contexts = contexts;
|
this.contexts = contexts;
|
||||||
this.dataGetterUris = dataGetterUris;
|
this.dataGetterUris = dataGetterUris;
|
||||||
this.templateName = templateName;
|
this.templateName = templateName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ShortViewContext> getContexts() {
|
public List<ShortViewContext> getContexts() {
|
||||||
return contexts;
|
return contexts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getDataGetterUris() {
|
public List<String> getDataGetterUris() {
|
||||||
return dataGetterUris;
|
return dataGetterUris;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTemplateName() {
|
public String getTemplateName() {
|
||||||
return templateName;
|
return templateName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ViewSpec[uri='" + uri + "', contexts=" + contexts
|
return "ViewSpec[uri='" + uri + "', contexts=" + contexts
|
||||||
+ ", dataGetterUris=" + dataGetterUris + ", templateName='"
|
+ ", dataGetterUris=" + dataGetterUris + ", templateName='"
|
||||||
+ templateName + "']";
|
+ templateName + "']";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A custom exception that says something was wrong with the config file. */
|
/** A custom exception that says something was wrong with the config file. */
|
||||||
public class ShortViewConfigException extends Exception {
|
public class ShortViewConfigException extends Exception {
|
||||||
public ShortViewConfigException(String message) {
|
public ShortViewConfigException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShortViewConfigException(String message, Throwable cause) {
|
public ShortViewConfigException(String message, Throwable cause) {
|
||||||
super(message, cause);
|
super(message, cause);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String PEOPLE_CLASSGROUP_URI = "http://vivoweb.org/ontology#vitroClassGrouppeople";
|
private static final String PEOPLE_CLASSGROUP_URI = "http://vivoweb.org/ontology#vitroClassGrouppeople";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A special data getter to support the kluge case of browsing an individual
|
* A special data getter to support the kluge case of browsing an individual
|
||||||
* that belongs to the People class group.
|
* that belongs to the People class group.
|
||||||
*
|
*
|
||||||
* A SPARQL query data getter that initializes itself from its own private
|
* A SPARQL query data getter that initializes itself from its own private
|
||||||
* "display model". The query finds a preferred title for the individual.
|
* "display model". The query finds a preferred title for the individual.
|
||||||
*/
|
*/
|
||||||
private static class FakeVivoPeopleDataGetter extends SparqlQueryDataGetter {
|
private static class FakeVivoPeopleDataGetter extends SparqlQueryDataGetter {
|
||||||
// private static String QUERY_STRING = ""
|
// private static String QUERY_STRING = ""
|
||||||
// + "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
// + "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
// + "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
// + "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
// + "SELECT ?pt \n" + "WHERE { \n"
|
// + "SELECT ?pt \n" + "WHERE { \n"
|
||||||
// + " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
// + " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
||||||
// + " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
// + " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
// + " ?vTitle vcard:title ?pt . \n" + "} LIMIT 1";
|
// + " ?vTitle vcard:title ?pt . \n" + "} LIMIT 1";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UQAM-Optimization New query including Linguistic context
|
* UQAM-Optimization New query including Linguistic context
|
||||||
*/
|
* and UQAM - In the filter, Case-insensitive language processing
|
||||||
private static String QUERY_STRING_LANG = ""
|
*/
|
||||||
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
private static String QUERY_STRING_LANG(String lang) {
|
||||||
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
return "\n"
|
||||||
+ "SELECT ?pt \n" + "WHERE { \n"
|
+ "PREFIX obo: <http://purl.obolibrary.org/obo/> \n"
|
||||||
+ " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
|
||||||
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
+ "SELECT ?pt \n" + "WHERE { \n"
|
||||||
+ " ?vTitle vcard:title ?pt . \n"
|
+ " ?uri obo:ARG_2000028 ?vIndividual . \n"
|
||||||
+ " FILTER (lang(?pt) = '?langCtx' ) \n"
|
+ " ?vIndividual vcard:hasTitle ?vTitle . \n"
|
||||||
+ " } LIMIT 1";
|
+ " ?vTitle vcard:title ?pt . \n"
|
||||||
private static final String FAKE_VIVO_PEOPLE_DATA_GETTER_URI = "http://FakeVivoPeopleDataGetter";
|
// + " FILTER (lang(?pt) = '?langCtx' ) \n" old and buggy
|
||||||
|
+ " FILTER (langMatches(lang(?pt), '" + lang+"' ) ) \n"
|
||||||
|
+ " } LIMIT 1";
|
||||||
|
}
|
||||||
|
private static final String FAKE_VIVO_PEOPLE_DATA_GETTER_URI = "http://FakeVivoPeopleDataGetter";
|
||||||
|
|
||||||
private static OntModel fakeDisplayModel = initializeFakeDisplayModel();
|
private static OntModel fakeDisplayModel = initializeFakeDisplayModel();
|
||||||
|
|
||||||
private static OntModel initializeFakeDisplayModel() {
|
private static OntModel initializeFakeDisplayModel() {
|
||||||
OntModel m = ModelFactory
|
OntModel m = ModelFactory
|
||||||
.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
.createOntologyModel(OntModelSpec.OWL_DL_MEM);
|
||||||
|
|
||||||
Resource dataGetter = m
|
Resource dataGetter = m
|
||||||
.getResource(FAKE_VIVO_PEOPLE_DATA_GETTER_URI);
|
.getResource(FAKE_VIVO_PEOPLE_DATA_GETTER_URI);
|
||||||
Property queryProperty = m.getProperty(DisplayVocabulary.QUERY);
|
Property queryProperty = m.getProperty(DisplayVocabulary.QUERY);
|
||||||
Property saveToVarProperty = m
|
Property saveToVarProperty = m
|
||||||
.getProperty(DisplayVocabulary.SAVE_TO_VAR);
|
.getProperty(DisplayVocabulary.SAVE_TO_VAR);
|
||||||
|
|
||||||
m.add(dataGetter, queryProperty, QUERY_STRING_LANG); //UQAM-Optimization Using query with linguistic context
|
m.add(dataGetter, queryProperty, QUERY_STRING_LANG("en-US")); //UQAM-Optimization Using query with linguistic context
|
||||||
m.add(dataGetter, saveToVarProperty, "extra");
|
m.add(dataGetter, saveToVarProperty, "extra");
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String individualUri;
|
private String individualUri;
|
||||||
private VitroRequest vreq;
|
private VitroRequest vreq;
|
||||||
private ServletContext ctx;
|
private ServletContext ctx;
|
||||||
private String langCtx = "en-US";
|
private String langCtx = "en-US";
|
||||||
|
|
||||||
public FakeVivoPeopleDataGetter(VitroRequest vreq, String individualUri) {
|
public FakeVivoPeopleDataGetter(VitroRequest vreq, String individualUri) {
|
||||||
super(vreq, initializeFakeDisplayModel(), "http://FakeVivoPeopleDataGetter");
|
super(vreq, initializeFakeDisplayModel(), "http://FakeVivoPeopleDataGetter");
|
||||||
this.individualUri = individualUri;
|
this.individualUri = individualUri;
|
||||||
this.vreq = vreq;
|
this.vreq = vreq;
|
||||||
this.ctx = vreq.getSession().getServletContext();
|
this.ctx = vreq.getSession().getServletContext();
|
||||||
this.langCtx = vreq.getLocale().getLanguage(); // UQAM-Optimization add the linguistic context
|
this.langCtx = vreq.getLocale().getLanguage(); // UQAM-Optimization add the linguistic context
|
||||||
if (!vreq.getLocale().getCountry().isEmpty()) {
|
if (!vreq.getLocale().getCountry().isEmpty()) {
|
||||||
this.langCtx += "-" + vreq.getLocale().getCountry();
|
this.langCtx += "-" + vreq.getLocale().getCountry();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> getData(Map<String, Object> pageData) {
|
public Map<String, Object> getData(Map<String, Object> pageData) {
|
||||||
Map<String, Object> parms = new HashMap<>();
|
Map<String, Object> parms = new HashMap<>();
|
||||||
parms.put("uri", individualUri);
|
parms.put("uri", individualUri);
|
||||||
parms.put("langCtx", langCtx); //UQAM-Optimization add the linguistic context
|
parms.put("langCtx", langCtx); //UQAM-Optimization add the linguistic context
|
||||||
|
return super.getData(parms);
|
||||||
|
}
|
||||||
|
|
||||||
return super.getData(parms);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue