From 9c7656e618d97c9080f16911ae0e2edcf685e71f Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Thu, 23 Jun 2022 11:18:47 +0200 Subject: [PATCH] add encoding property to terms and synonyms --- .../vocabulary/VocabularyRestController.java | 6 +- .../resources/static/js/vocabularyEditor.js | 1 + .../resources/templates/vocabularies.html | 2 +- .../resources/templates/vocabularyEditor.html | 50 +++++++++++++-- .../dnetlib/is/vocabulary/model/Synonym.java | 62 +++++++++++++++++++ .../is/vocabulary/model/VocabularyTerm.java | 27 +++++--- .../src/main/resources/sql/schema.sql | 5 +- 7 files changed, 137 insertions(+), 16 deletions(-) create mode 100644 libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/Synonym.java diff --git a/apps/dnet-is-application/src/main/java/eu/dnetlib/is/vocabulary/VocabularyRestController.java b/apps/dnet-is-application/src/main/java/eu/dnetlib/is/vocabulary/VocabularyRestController.java index 54b43f9f..3c25f4d7 100644 --- a/apps/dnet-is-application/src/main/java/eu/dnetlib/is/vocabulary/VocabularyRestController.java +++ b/apps/dnet-is-application/src/main/java/eu/dnetlib/is/vocabulary/VocabularyRestController.java @@ -27,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import eu.dnetlib.common.controller.AbstractDnetController; +import eu.dnetlib.is.vocabulary.model.Synonym; import eu.dnetlib.is.vocabulary.model.Vocabulary; import eu.dnetlib.is.vocabulary.model.VocabularyTerm; import eu.dnetlib.is.vocabulary.model.VocabularyTermPK; @@ -98,12 +99,13 @@ public class VocabularyRestController extends AbstractDnetController { term.setVocabulary(vocId); term.setCode(n.valueOf("@code")); term.setName(n.valueOf("@english_name")); + term.setEncoding(n.valueOf("@encoding")); term.setSynonyms(n.selectNodes(".//SYNONYM") .stream() - .map(ns -> ns.valueOf("@term")) + .map(ns -> new Synonym(ns.valueOf("@term"), ns.valueOf("@encoding"))) .sorted() .distinct() - .toArray(String[]::new)); + .toArray(Synonym[]::new)); vocabularyTermRepository.save(term); } diff --git a/apps/dnet-is-application/src/main/resources/static/js/vocabularyEditor.js b/apps/dnet-is-application/src/main/resources/static/js/vocabularyEditor.js index 95622a37..7be7ae9b 100644 --- a/apps/dnet-is-application/src/main/resources/static/js/vocabularyEditor.js +++ b/apps/dnet-is-application/src/main/resources/static/js/vocabularyEditor.js @@ -26,6 +26,7 @@ app.controller('vocabularyController', function($scope, $http, $location) { $scope.tmpTerm = { 'code' : '', 'name' : '', + 'encoding' : 'OPENAIRE', 'synonyms' : [] }; } diff --git a/apps/dnet-is-application/src/main/resources/templates/vocabularies.html b/apps/dnet-is-application/src/main/resources/templates/vocabularies.html index 90919e9b..f727cbc1 100644 --- a/apps/dnet-is-application/src/main/resources/templates/vocabularies.html +++ b/apps/dnet-is-application/src/main/resources/templates/vocabularies.html @@ -89,7 +89,7 @@ diff --git a/apps/dnet-is-application/src/main/resources/templates/vocabularyEditor.html b/apps/dnet-is-application/src/main/resources/templates/vocabularyEditor.html index cdb65bff..1487e66c 100644 --- a/apps/dnet-is-application/src/main/resources/templates/vocabularyEditor.html +++ b/apps/dnet-is-application/src/main/resources/templates/vocabularyEditor.html @@ -49,8 +49,9 @@ - - + + + @@ -62,9 +63,10 @@ +
CodeNameCodeNameEncoding Synonyms
{{t.code}} {{t.name}}{{t.encoding}} 0 synonym(s) - {{s}} + {{s.term}} @@ -97,11 +99,51 @@ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SynonymEncoding
0 synonym(s)
{{s.term}}{{s.encoding}}
+ +
+
diff --git a/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/Synonym.java b/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/Synonym.java new file mode 100644 index 00000000..28d43e0f --- /dev/null +++ b/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/Synonym.java @@ -0,0 +1,62 @@ +package eu.dnetlib.is.vocabulary.model; + +import java.io.Serializable; +import java.util.Objects; + +import org.apache.commons.lang3.StringUtils; + +public class Synonym implements Serializable, Comparable { + + private static final long serialVersionUID = 194743347016156197L; + + public Synonym() {} + + public Synonym(final String term, final String encoding) { + this.term = term; + this.encoding = encoding; + } + + private String term; + + private String encoding; + + public String getTerm() { + return term; + } + + public void setTerm(final String term) { + this.term = term; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(final String encoding) { + this.encoding = encoding; + } + + @Override + public int hashCode() { + return Objects.hash(encoding, term); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { return true; } + if (!(obj instanceof Synonym)) { return false; } + final Synonym other = (Synonym) obj; + return Objects.equals(encoding, other.encoding) && Objects.equals(term, other.term); + } + + @Override + public String toString() { + return String.format("Synonym [term=%s, encoding=%s]", term, encoding); + } + + @Override + public int compareTo(final Synonym o) { + return StringUtils.compare(term, o.getTerm()); + } + +} diff --git a/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/VocabularyTerm.java b/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/VocabularyTerm.java index 25bafe7e..6aa86f43 100644 --- a/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/VocabularyTerm.java +++ b/libs/dnet-is-common/src/main/java/eu/dnetlib/is/vocabulary/model/VocabularyTerm.java @@ -12,13 +12,15 @@ import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; -import com.vladmihalcea.hibernate.type.array.StringArrayType; +import com.vladmihalcea.hibernate.type.json.JsonBinaryType; +import com.vladmihalcea.hibernate.type.json.JsonStringType; @Entity @Table(name = "vocabulary_terms") @IdClass(VocabularyTermPK.class) @TypeDefs({ - @TypeDef(name = "string-array", typeClass = StringArrayType.class) + @TypeDef(name = "json", typeClass = JsonStringType.class), + @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) }) public class VocabularyTerm implements Serializable { @@ -35,9 +37,12 @@ public class VocabularyTerm implements Serializable { @Column(name = "name") private String name; - @Type(type = "string-array") - @Column(name = "synonyms", columnDefinition = "text[]") - private String[] synonyms; + @Column(name = "encoding") + private String encoding; + + @Type(type = "jsonb") + @Column(name = "synonyms", columnDefinition = "jsonb") + private Synonym[] synonyms; public String getCode() { return code; @@ -63,11 +68,19 @@ public class VocabularyTerm implements Serializable { this.name = name; } - public String[] getSynonyms() { + public String getEncoding() { + return encoding; + } + + public void setEncoding(final String encoding) { + this.encoding = encoding; + } + + public Synonym[] getSynonyms() { return synonyms; } - public void setSynonyms(final String[] synonyms) { + public void setSynonyms(final Synonym[] synonyms) { this.synonyms = synonyms; } diff --git a/libs/dnet-is-common/src/main/resources/sql/schema.sql b/libs/dnet-is-common/src/main/resources/sql/schema.sql index aa23ce7f..214ac77e 100644 --- a/libs/dnet-is-common/src/main/resources/sql/schema.sql +++ b/libs/dnet-is-common/src/main/resources/sql/schema.sql @@ -1,5 +1,5 @@ CREATE TABLE vocabularies ( - id text PRIMARY KEY, + id text PRIMARY KEY, name text NOT NULL, description text ); @@ -8,7 +8,8 @@ CREATE TABLE vocabulary_terms ( vocabulary text NOT NULL REFERENCES vocabularies(id), code text NOT NULL, name text NOT NULL, - synonyms text[], + encoding text DEFAULT 'OPENAIRE', + synonyms jsonb, PRIMARY KEY (vocabulary, code) );