From ceebd3e4223cd7589a78f81316b010d01513627d Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Mon, 4 Jul 2022 22:10:20 +0200 Subject: [PATCH] fix: process string and untyped literals differently (#296) * fix: process string and untyped literals differently * fix for prev commit * review fixes * fix: generators fixes * chore: removed unused imports --- .../VTwo/MultiValueEditSubmission.java | 41 +++++++++++++------ .../edit/n3editing/VTwo/ProcessRdfForm.java | 2 +- .../NewIndividualFormGenerator.java | 4 +- .../generators/RDFSLabelGenerator.java | 38 ++--------------- 4 files changed, 35 insertions(+), 50 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java index 306ebdce7..1c99a5461 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/MultiValueEditSubmission.java @@ -30,6 +30,8 @@ import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class MultiValueEditSubmission { + private static final String LABEL = "label"; + String editKey; private Map> literalsFromForm ; @@ -172,20 +174,14 @@ public class MultiValueEditSubmission { /* maybe this could be static */ public Literal createLiteral(String value, String datatypeUri, String lang) { if( datatypeUri != null && !datatypeUri.isEmpty() ){ - // UQAM Original code contained tow-dots ':' in place of '#' -// if( "http://www.w3.org/2001/XMLSchema:anyURI".equals(datatypeUri) ){ if( XSD.anyURI.getURI().equals(datatypeUri) ){ -// try { -// return literalCreationModel.createTypedLiteral( URLEncoder.encode(value, "UTF8"), datatypeUri); return literalCreationModel.createTypedLiteral( value, datatypeUri); -// } catch (UnsupportedEncodingException e) { -// log.error(e, e); -// } - } else if ( XSD.xstring.getURI().equals(datatypeUri) || RDF.dtLangString.getURI().equals(datatypeUri) ){ - if( lang != null && lang.length() > 0 ) return ResourceFactory.createLangLiteral(value, lang); + } else if ( RDF.dtLangString.getURI().equals(datatypeUri) ){ + if( StringUtils.isNotEmpty(lang) ) { + return ResourceFactory.createLangLiteral(value, lang); + } } return literalCreationModel.createTypedLiteral(value, datatypeUri); - // UQAM take into account the linguistic context } else if( lang != null && lang.length() > 0 ) return ResourceFactory.createLangLiteral(value, lang); return ResourceFactory.createPlainLiteral(value); @@ -311,9 +307,9 @@ public class MultiValueEditSubmission { } // if the language is set in the given Literal, this language-tag should be used and remain the same // for example when you edit an label with an langauge-tag (no matter which language is selected globally) - if (!StringUtils.isBlank(editConfig.getLiteralsInScope().get("label").get(0).getLanguage()) && getLabelLanguage) + if (getLabelLanguage && isLangSetInFirstLiteral(editConfig) ) { - rangeLang = editConfig.getLiteralsInScope().get("label").get(0).getLanguage(); + rangeLang = editConfig.getLiteralsInScope().get(LABEL).get(0).getLanguage(); } else { // if the literal has no langauge-tag, use the language which is globally selected rangeLang = _vreq.getLocale().getLanguage(); if (!_vreq.getLocale().getCountry().isEmpty()) { @@ -323,6 +319,7 @@ public class MultiValueEditSubmission { } } catch (Exception e) { + log.error(e,e); } literalsArray.add(createLiteral( value, @@ -336,6 +333,26 @@ public class MultiValueEditSubmission { log.debug("could not find value for parameter " + var ); } } + + private boolean isLangSetInFirstLiteral(EditConfigurationVTwo editConfig) { + Map> literalsInScope = editConfig.getLiteralsInScope(); + if (!literalsInScope.containsKey(LABEL)) { + return false; + } + List labelLiterals = literalsInScope.get(LABEL); + if (labelLiterals == null) { + return false; + } + if (labelLiterals.size() == 0) { + return false; + } + Literal literal = labelLiterals.get(0); + if (literal == null){ + return false; + } + + return StringUtils.isNotEmpty(literal.getLanguage()); + } //Add literal to form //Add uri to form public void addUriToForm(EditConfigurationVTwo editConfig, String var, String[] valuesArray) { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java index 9652d72dc..d254ac43f 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java @@ -218,7 +218,7 @@ public class ProcessRdfForm { if (RDF.dtLangString.getURI().equals(aLiteratDT) && !aLiteral.getLanguage().isEmpty()) { newLiteral = aLiteral; } - else if (XSD.xstring.getURI().equals(aLiteratDT) || RDF.dtLangString.getURI().equals(aLiteratDT)) { + else if ( RDF.dtLangString.getURI().equals(aLiteratDT)) { String lang = vreq.getLocale().getLanguage(); if (!vreq.getLocale().getCountry().isEmpty()) { lang += "-" + vreq.getLocale().getCountry(); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java index fff4d6732..1a18bf99c 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java @@ -12,8 +12,8 @@ import javax.servlet.http.HttpSession; import org.apache.jena.ontology.OntModel; import org.apache.jena.rdf.model.Literal; +import org.apache.jena.vocabulary.RDF; import org.apache.jena.vocabulary.RDFS; -import org.apache.jena.vocabulary.XSD; import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; @@ -219,7 +219,7 @@ public class NewIndividualFormGenerator implements EditConfigurationGenerator { VitroRequest vreq, Map fields) { FieldVTwo field = new FieldVTwo(); field.setName("label"); - field.setRangeDatatypeUri( XSD.xstring.toString() ); + field.setRangeDatatypeUri( RDF.dtLangString.getURI() ); List validators = new ArrayList(); validators.add("nonempty"); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java index 13e845a86..efd8c89e8 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java @@ -15,11 +15,9 @@ import org.apache.commons.logging.LogFactory; import org.apache.jena.ontology.OntModel; import org.apache.jena.rdf.model.Literal; -import org.apache.jena.vocabulary.XSD; +import org.apache.jena.vocabulary.RDF; -import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; -import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; @@ -216,7 +214,7 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { FieldVTwo field = new FieldVTwo(); field.setName(literalName); //queryForExisting is not being used anywhere in Field - String rangeDatatypeUri = getRangeDatatypeUri(editConfiguration, vreq); + String rangeDatatypeUri = RDF.dtLangString.getURI(); String rangeLang = getRangeLang(editConfiguration, vreq); List validators = getFieldValidators(editConfiguration, vreq); @@ -253,43 +251,13 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { return rangeLang; } - private String getRangeDatatypeUri(EditConfigurationVTwo editConfiguration, - VitroRequest vreq) { - Individual subject = EditConfigurationUtils.getSubjectIndividual(vreq); - DataProperty prop = EditConfigurationUtils.getDataProperty(vreq); - String rangeDatatypeUri = null; - //rangeDefaultJson goes into literalk options - //validations include dataype:rangedatatypeurijson - //rangeDatatypeUri is rangeDAttypeUriJson - //rangeLang = rangeLanJson - DataPropertyStatement dps =EditConfigurationUtils.getDataPropertyStatement(vreq, vreq.getSession(), dataHash, predicateUri); - if (dps != null) { - - rangeDatatypeUri = dps.getDatatypeURI(); - if (rangeDatatypeUri == null) { - log.debug("no range datatype uri set on rdfs:label statement for property " + predicateUri + "in RDFSLabelGenerator"); - } else { - log.debug("range datatype uri of [" + rangeDatatypeUri + "] on rdfs:label statement for property " + predicateUri + "in RDFSLabelGenerator"); - } - - } else { - log.debug("No incoming rdfs:label statement for property "+predicateUri+"; adding a new statement"); - rangeDatatypeUri = XSD.xstring.getURI(); - } - - if( rangeDatatypeUri != null && rangeDatatypeUri.trim().length() == 0) - rangeDatatypeUri = null; - - return rangeDatatypeUri; - } - private List getFieldValidators(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { List validatorList = new ArrayList(); String predicateUri =EditConfigurationUtils.getPredicateUri(vreq); if (predicateUri.equals(VitroVocabulary.LABEL) || predicateUri.equals(VitroVocabulary.RDF_TYPE)) { validatorList.add("nonempty"); } - String rangeDatatypeUri = getRangeDatatypeUri(editConfiguration, vreq); + String rangeDatatypeUri = RDF.dtLangString.getURI(); if (rangeDatatypeUri != null && !rangeDatatypeUri.isEmpty()) { validatorList.add("datatype:" + rangeDatatypeUri); }